随机数组排序(1,000,000)

时间:2017-03-11 04:10:40

标签: java arrays sorting random

我一直在研究这个问题:

创建一个包含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的新手,而且我真的想知道这是如何以及为什么不起作用,所以我可以纠正自己并学习。)

提前致谢!

3 个答案:

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

  1. 插入排序通常优于短数组的选择排序。

  2. 对于大型数组,请使用Quicksort,Heapsort或Merge Sort。

  3. 学习如何编程这些方法很有用。