我正在做关于排序算法效率的项目。假设我执行了50次泡泡排序迭代并找到n个数字的平均时间。但我意识到前几次迭代总是慢于后续迭代
e.g。 1394ms,1381ms,1001ms,1008ms,1008ms,1011ms ......
long lStartTime = System.currentTimeMillis();
bubbleSort(R); // R is the array of int
long lEndTime = System.currentTimeMillis();
long difference = lEndTime - lStartTime;
背后的原因是什么?这是因为cpu能够分辨哪些数据存储到缓存中? 如果是这样,我不应该使用后续的计算时间进行分析,因为这是不现实的吗?
谢谢!
编辑:我也在做其他的排序算法,冒泡排序作为一个例子,但事情是它发生在我做的所有排序除了插入
public static int[] bubbleSort(int[] S) {
int counter = 0;
boolean isUnsort = true;
while (isUnsort) {
isUnsort = false;
for (int i = 0; i < S.length - 1 - counter; i++) {
if (S[i] > S[i + 1]) {
int temp = S[i];
S[i] = S[i + 1];
S[i + 1] = temp;
isUnsort = true;
}
}
counter++;
}
return S;
}
答案 0 :(得分:4)
可能是Just-in Time Compiler将您的字节码转换为更有效的形式。我建议你在开始计时之前至少运行一次(但最好是几次)热身。此外,冒泡排序是一种非常低效的排序。