我一直在研究这个问题:
创建一个包含10个随机整数的数组,以及1000个随机整数的数组,以及一个包含一百万(1,000,000)个随机整数的数组。 对于每个阵列: 显示数组的前十个元素。 数组的调用选择排序。 显示已排序数组的前十个元素。
到目前为止,这是我的代码:
public class Lab_10_3 {
public static void main(String[] args) {
int myRandomArray1[] = new int[10];
int myRandomArray2[] = new int[1000];
int myRandomArray3[] = new int[1000000];
count(myRandomArray1);
printOriginal(myRandomArray1);
selectionSort(myRandomArray1);
printArray(myRandomArray1);
count(myRandomArray2);
printOriginal(myRandomArray2);
selectionSort(myRandomArray2);
printArray(myRandomArray2);
count(myRandomArray3);
printOriginal(myRandomArray3);
selectionSort(myRandomArray3);
printArray(myRandomArray3);
}
public static void count(int[] value) {
System.out.println("The original order is: ");
for (int i = 0; i < 10; i++) {
value[i] = (int) (Math.random() * 10);
}
}
public static void selectionSort(int[] array) {
int startScan, index, minIndex, minValue;
for (startScan = 0; startScan < (array.length - 1); startScan++) {
minIndex = startScan;
minValue = array[startScan];
for (index = startScan + 1; index < array.length; index++) {
if (array[index] < minValue) {
minValue = array[index];
minIndex = index;
}
}
array[minIndex] = array[startScan];
array[startScan] = minValue;
}
}
public static void printArray(int[] value) {
System.out.println("The sorted values are:");
for (int i = 0; i < 10; i++)
System.out.print(value[i] + " ");
System.out.println();
}
public static void printOriginal(int[] value) {
for (int j = 0; j < 10; j++) {
System.out.println(value[j]);
}
}
}
出于某种原因,我的randomArray3(1,000,000)不会打印它的排序值,我无法弄清楚为什么......(我还是Java的新手,而且我真的想知道这是如何以及为什么不起作用,所以我可以纠正自己并学习。)
提前致谢!
答案 0 :(得分:0)
运行代码后,我认为问题只是在一百万个整数上运行O(n ^ 2)选择排序需要很长时间。该程序需要永远终止。
使用内置(且非常高效)Arrays.sort
替换排序算法,程序几乎立即终止:
import java.util.Arrays;
public class Lab_10_3 {
public static void main(String[] args) {
...
count(myRandomArray3);
printOriginal(myRandomArray3);
Arrays.sort(myRandomArray3);
printArray(myRandomArray3);
}
...
}
答案 1 :(得分:0)
选择排序复杂度为O(n ^ 2)。
这意味着在最坏的情况下,可能需要(常量* 1_000_000 ^ 2)次操作来排序1_000_000个数字。这是一个巨大的数字。
selectionSort(myRandomArray3);
根本无法快速终止。
答案 2 :(得分:0)
插入排序通常优于短数组的选择排序。
对于大型数组,请使用Quicksort,Heapsort或Merge Sort。
学习如何编程这些方法很有用。