Java 如何正确比较排序方法quicksort和mergesort的运行时间?
我有一个任务来比较使用mergesort和quicksort对大型整数数组进行排序的执行时间。这些算法的实现都是从一本书上抄下来的。它们都按升序对整数排序。然后,我被要求说明快速排序的平均速度有多快。然而,通过我的测试样本量(虽然很小),我发现mergesort的速度要快一点,这让我相信我的测试不正确 我有两个程序,一个用于合并排序,一个用于快速排序。它们的main()代码是相同的(如下所示)。我创建了一个随机大小介于0和某个选定上限之间的数组。然后我用随机整数填充数组。然后我对数组排序并打印它。我使用currentTimeMillis()检查程序的运行时。我对quicksort和mergesort进行了10次运行测试,将总时间相加,然后除以10得到排序的平均运行时间。我没有发现quicksort平均比mergesort快。我也尝试过使用固定的数组大小,但结果仍然没有暗示快速排序会更快。什么是正确的测试方法Java 如何正确比较排序方法quicksort和mergesort的运行时间?,java,Java,我有一个任务来比较使用mergesort和quicksort对大型整数数组进行排序的执行时间。这些算法的实现都是从一本书上抄下来的。它们都按升序对整数排序。然后,我被要求说明快速排序的平均速度有多快。然而,通过我的测试样本量(虽然很小),我发现mergesort的速度要快一点,这让我相信我的测试不正确 我有两个程序,一个用于合并排序,一个用于快速排序。它们的main()代码是相同的(如下所示)。我创建了一个随机大小介于0和某个选定上限之间的数组。然后我用随机整数填充数组。然后我对数组排序并打印它
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%以上。