在Java中,我有一些代码可以对一次插入排序的10次尝试进行计时。它对相同的数组进行排序,但最多100个单词,200个单词等,直到on数组的完整长度。下面的代码分别用于100个和200个单词,但是在更改了变量的情况下,它们看起来都一样。
但是,下一个平均时间似乎越来越短。例如。 100个单词为9658233ns,200个单词为4273459ns,300个单词为3716726ns,400个单词为2965091ns,459个单词为2842528ns。但是,如果我颠倒顺序,则首先对整个数组进行排序,最后对100个单词的数组进行排序,则对整个数组进行排序的时间最长,而对100个单词的数组进行排序的时间最短。
使用不同的时间对插入排序进行计时会导致我获得更一致的结果吗?
long i1AverageTime = 0L;
for (int i = 0; i < 10; i++) {
long start = System.nanoTime();
insertionSort(myArray, 100);
long end = System.nanoTime();
long timeTaken = end - start;
i1AverageTime += timeTaken;
}
i1AverageTime /= 10;
long i2AverageTime = 0L;
for (int i = 0; i < 10; i++) {
long start = System.nanoTime();
insertionSort(myArray, 200);
long end = System.nanoTime();
long timeTaken = end - start;
i2AverageTime += timeTaken;
}
i2AverageTime /= 10;
答案 0 :(得分:1)
使用计时方法进行算法分析确实是判断算法性能的一种困难方法,尤其是在个人或学校使用的笔记本电脑或机器上。
您可能会遇到不稳定的原因有很多:
衡量算法性能的一种更准确的方法是将算法的运行时复杂度与已知复杂度(通常为O(n)
或O(n^2)
)进行比较。