迭代后计算时间减少

时间:2014-07-16 05:45:11

标签: java cpu-speed

我正在做关于排序算法效率的项目。假设我执行了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;
}

1 个答案:

答案 0 :(得分:4)

可能是Just-in Time Compiler将您的字节码转换为更有效的形式。我建议你在开始计时之前至少运行一次(但最好是几次)热身。此外,冒泡排序是一种非常低效的排序。