【发布时间】:2018-03-02 19:04:42
【问题描述】:
我实现了一个标准的快速排序算法,并在多次运行中对其进行了测试,并将运行时间存储在一个数组中。
int max = 100;
int runs = 1000;
int[] arr = new int[max];
Long[] times = new Long[runs];
while(n < runs){
for(int i =0 ; i<max; i++){
arr[i]=(int)(Math.random()*99);
//arr[i] = i;
}
Long start = System.nanoTime();
quicksortsimple(arr,0,max-1);
Long now = System.nanoTime();
times[n++] = now-start;
}
现在发生的情况是,输出的“times”数组以更大的值开始并逐渐减小,在第 100 个索引(快速排序 100 次运行)之后,它变得有点恒定,但这个值小于初始 2 的十分之一-3 值。 n= 1000 返回的平均值在程序的几个 rune 中是相同的。
即使我将数组初始化为已经排序(注释掉的行),同样的事情也会发生,尽管需要更多的平均时间(因为它应该)。
但这不应该为同一个数组上的同一个算法返回如此不同的运行时间。如果有的话,递减模式表示什么?
【问题讨论】:
-
这表明你的基准有缺陷:stackoverflow.com/questions/504103/…
-
只要
System.nanoTime()返回的数字不会随着每次迭代而变小(因此我们不必处理时间旅行),似乎有很多可能的解释。我建议仅在具有恒定值时才使用测量值...
标签: java performance timestamp quicksort nanotime