java插入排序仅适用于小数组
我发现这段代码对合并插入排序很有帮助,但它只适用于一小部分项,我需要能够对大小不超过50000的整数数组进行排序。我添加了进一步的逻辑,以获取项目列表,对它们进行随机排序,然后将排序后的整数写入另一个文件。不知道问题是什么。我弄乱了K的值,但没有运气
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class hybridSort
{
public static final int K = 5;
public static void insertionSort(int arr[], int p, int q) {
for (int i = p; i < q; i++) {
int tempVal = arr[i + 1];
int j = i + 1;
while (j > p && arr[j - 1] > tempVal) {
arr[j] = arr[j - 1];
j--;
}
arr[j] = tempVal;
}
int[] temp = Arrays.copyOfRange(arr, p, q +1);
// Arrays.stream(temp).forEach(i -> System.out.print(i + " "));
System.out.println();
}
public static void merge(int arr[], int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;
int[] LA = Arrays.copyOfRange(arr, p, q +1);
int[] RA = Arrays.copyOfRange(arr, q+1, r +1);
int RIDX = 0;
int LIDX = 0;
for (int i = p; i < r - p + 1; i++) {
if (RIDX == n2) {
arr[i] = LA[LIDX];
LIDX++;
} else if (LIDX == n1) {
arr[i] = RA[RIDX];
RIDX++;
} else if (RA[RIDX] > LA[LIDX]) {
arr[i] = LA[LIDX];
LIDX++;
} else {
arr[i] = RA[RIDX];
RIDX++;
}
}
}
public static void sort(int arr[], int p, int r) {
if (r - p > K) {
int q = (p + r) / 2;
sort(arr, p, q);
sort(arr, q + 1, r);
merge(arr, p, q, r);
} else {
insertionSort(arr, p, r);
}
}
public static void main(String string[]) {
long startTime= System.nanoTime();
System.out.println(startTime);
int arr[] = new int[10];
int y = 0;
int nums;
try {
Scanner scan = new Scanner(new File("randomNum"));
while (scan.hasNextInt())
{
nums = scan.nextInt();
arr[y] = nums;
y++;
}
scan.close();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Random rand = new Random();
for (int i = 0; i < arr.length; i++) {
int randomIndexToSwap = rand.nextInt(arr.length);
int temp = arr[randomIndexToSwap];
arr[randomIndexToSwap] = arr[i];
arr[i] = temp;
}
//int[] A = { 2, 5, 1, 6, 7, 3, 8, 4, 9, 15, 12, 10, 11, 20, 1, 7, 6, 10};
sort(arr, 0, arr.length - 1);
try {
FileWriter fr = new FileWriter("sortedList");
BufferedWriter br = new BufferedWriter(fr);
PrintWriter out = new PrintWriter(br);
for(int i=0; i<arr.length; i++)
{
out.write(Integer.toString(arr[i]));
out.write("\n");
}
out.close();
}
catch(IOException e){
System.out.println(e);
}
long endTime=System.nanoTime();
System.out.println(endTime);
long runTime = endTime-startTime;
System.out.println(runTime);
// Arrays.stream(A).forEach(i -> System.out.print(i + " "));
}
}
共 (0) 个答案