微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择排序与插入排序:8 和 14 个 Java 版本的处理时间不同

如何解决选择排序与插入排序:8 和 14 个 Java 版本的处理时间不同

我有以下简单排序算法(冒泡、选择、插入)的实现。我的目标:测量这些方法在具有整数元素的相同随机生成的数组数据上的执行时间。数组大小为 10_000。

public void sortBubble() {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - 1 - i; j++) {
            if (data[j].compareto(data[j + 1]) > 0) {
                swap(j,j + 1);
            }
        }
    }
}

public void sortSelect() {
    for (int i = 0; i < size - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < size; j++) {
            if (data[j].compareto(data[minIndex]) < 0) {
                minIndex = j;
            }
        }
        swap(minIndex,i);
    }
}

public void sortInsert() {
    for (int i = 1; i < size; i++) {
        E temp = data[i];
        int in = i;
        while (in > 0 && data[in - 1].compareto(temp) >= 0) {
            data[in] = data[in - 1];
            in--;
        }
        data[in] = temp;
    }
}

private void swap(int indexA,int indexB) {
    E temp = data[indexA];
    data[indexA] = data[indexB];
    data[indexB] = temp;
}

我如何生成用于排序的数据:

Random random = new Random();
for (int i = 0; i < ARRAY_CAPACITY; i++) {
    int value = random.nextInt(MAX_VALUE);
    array.add(value);
}

当我使用 Java 8 时,我常见的稳定结果是插入排序是最快的。例如:

Sort Bubble took time: 381384 micros.
Sort Select took time: 100343 micros.
Sort Insert took time: 45580 micros.

但是当我在 Java 14 和更高版本上运行相同的代码时,突然(对我来说)选择排序比插入排序快:

Sort Bubble took time: 521345 micros.
Sort Select took time: 119718 micros.
Sort Insert took time: 144706 micros.

我已多次检查代码:我运行此代码的方式没有差异和异常情况。 此问题已稳定重现。我想,它与自第 14 个 Java 版本以来的变化有关,但我不知道到底是什么。您知道造成这种情况的主要原因是什么吗?

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。