1

我正在做关于排序算法效率的项目。假设我执行了 50 次冒泡排序迭代并找到 n 个数字所花费的平均时间。但我意识到前几次迭代总是比后续迭代慢

例如 1394 毫秒、1381 毫秒、1001 毫秒、1008 毫秒、1008 毫秒、1011 毫秒...

        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;
}
4

1 回答 1

4

这可能是即时编译器将您的字节码转换为更有效的形式。我建议您在开始计时之前至少进行一次(但最好是几次)热身活动。此外,冒泡排序是一种非常低效的排序。

于 2014-07-16T05:48:41.087 回答