比较Insertion Sort的两个(几乎相同的)实现;其中一个失败了

时间:2016-12-31 17:41:59

标签: java insertion-sort

基本上,我在非工作实施中将n替换为aData[i]。我错过了一些根本错误的东西吗?第二个实现在相同的TEST数据上失败。

传递实施:

static long[] sort(long[] aData) {
    for (int i = 1; i < aData.length; i++) {
        long n = aData[i];

        int j = i - 1;
        while (j >= 0 && aData[j] > n) {
            aData[j + 1] = aData[j];
            j--;
        }
        aData[j + 1] = n;
    }
    return aData;
}

未能实施:

static long[] sort(long[] aData) {
    for (int i = 1; i < aData.length; i++) {
        int j = i - 1;
        while (j >= 0 && aData[j] > aData[i]) {
            aData[j + 1] = aData[j];
            j--;
        }
        aData[j + 1] = aData[i];
    }
    return aData;
}

1 个答案:

答案 0 :(得分:2)

在while循环的第一次迭代中,j + 1 == i。因此,当您编写aData[j + 1] = aData[j]时,您会在循环中更改aData[i]的值。

在初始版本中,n在整个操作过程中保持不变。另请注意,使用aData[i]代替n不太可能提高性能(如果有的话,它可能会更慢)。