我有几个关于壳牌排序与壳牌差距的问题在网上找不到。
public static void shell(int[] a) {
int increment = a.length / 2;
while (increment > 0) {
for (int i = increment; i < a.length; i++) {
int j = i;
int temp = a[i];
while (j >= increment && a[j - increment] > temp) {
a[j] = a[j - increment];
j = j - increment;
}
a[j] = temp;
}
if (increment == 2) {
increment = 1;
} else {
increment *= (5.0 / 11);
}
}
}
这是我在网上找到的代码,但我不太明白最后一个else语句。5.0/11 代表什么?我还需要分析算法的复杂性,尽管我收到了相当令人困惑的结果:
似乎最好和最坏的情况都是 O(n)。这些结果合法吗?