Java 如何正确比较排序方法quicksort和mergesort的运行时间?

Java 如何正确比较排序方法quicksort和mergesort的运行时间?,java,Java,我有一个任务来比较使用mergesort和quicksort对大型整数数组进行排序的执行时间。这些算法的实现都是从一本书上抄下来的。它们都按升序对整数排序。然后,我被要求说明快速排序的平均速度有多快。然而,通过我的测试样本量(虽然很小),我发现mergesort的速度要快一点,这让我相信我的测试不正确 我有两个程序,一个用于合并排序,一个用于快速排序。它们的main()代码是相同的(如下所示)。我创建了一个随机大小介于0和某个选定上限之间的数组。然后我用随机整数填充数组。然后我对数组排序并打印它

我有一个任务来比较使用mergesort和quicksort对大型整数数组进行排序的执行时间。这些算法的实现都是从一本书上抄下来的。它们都按升序对整数排序。然后,我被要求说明快速排序的平均速度有多快。然而,通过我的测试样本量(虽然很小),我发现mergesort的速度要快一点,这让我相信我的测试不正确

我有两个程序,一个用于合并排序,一个用于快速排序。它们的main()代码是相同的(如下所示)。我创建了一个随机大小介于0和某个选定上限之间的数组。然后我用随机整数填充数组。然后我对数组排序并打印它。我使用currentTimeMillis()检查程序的运行时。我对quicksort和mergesort进行了10次运行测试,将总时间相加,然后除以10得到排序的平均运行时间。我没有发现quicksort平均比mergesort快。我也尝试过使用固定的数组大小,但结果仍然没有暗示快速排序会更快。什么是正确的测试方法

public static void main(String[] args){
        /* create an array of some size 0 to 100000 with
           random integers and measure the time it takes
           to sort the array in ascending order (where sort() is either quicksort 
           or mergesort.)
        */
        long a = System.currentTimeMillis();
        Random rnd = new Random(System.currentTimeMillis());
        Integer[] array = new Integer[rnd.nextInt(100000)];
        for(int i = 0; i < array.length; i++){
            array[i] = rnd.nextInt();
        }
        sort(array);
        System.out.println(Arrays.toString(array));
        long b = System.currentTimeMillis() - a;
        System.out.println("Program runtime: " + b + "ms");
    }
}

Expected result: Quicksort average running time should be some % faster
in comparison to mergesort, for large random integer arrays.

Actual result: Mergesort was slightly faster in most tests 
(10K elements, 100K elements, 1000K elements).
publicstaticvoidmain(字符串[]args){
/*使用创建大小为0到100000的数组
随机整数并测量所需时间
按升序对数组排序(其中sort()为快速排序
或合并排序。)
*/
长a=System.currentTimeMillis();
Random rnd=新的Random(System.currentTimeMillis());
整数[]数组=新整数[rnd.nextInt(100000)];
for(int i=0;i
您的测量包括随机阵列的生成,这是一项繁重的操作,会扭曲结果

//在这里进行初始化
long a=System.nanoTime();
排序(数组);
long b=System.nanoTime();
//在这里进行输出
。。。将仅测量执行
排序(数组)
期间经过的时间。这是你感兴趣的时间


System.currentTimeMillis()
替换为
System.nanoTime()
会使结果更精确。

虽然拾取随机元素很好,但我不会说为阵列拾取随机大小。请向我们展示您实现这两种排序算法的代码。以及mangusta关于不拾取随机大小的数组的回答,排除作为计时的一部分的数组生成,我现在似乎得到了显著的结果,quicksort确实运行得更快。结果表明,数组生成占程序运行时间的80%以上。