有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案