基本上,我在非工作实施中将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;
}
答案 0 :(得分:2)
在while循环的第一次迭代中,j + 1 == i
。因此,当您编写aData[j + 1] = aData[j]
时,您会在循环中更改aData[i]
的值。
在初始版本中,n
在整个操作过程中保持不变。另请注意,使用aData[i]
代替n
不太可能提高性能(如果有的话,它可能会更慢)。