核心思想
为解决插入排序的最坏情况问题,希尔排序通过一个增量序列先保证区间有序将最坏情况优化掉
注意增量序列必须保证第n个和第n+1互质
算法实现
- Java版
public static int[] sort(int[] data) {
int length = data.length;
int h = 1;
while (h < length / 3) {
h = 3 * h + 1;
}
while (h >= 1) {
for (int i = h; i < length; i += h) {
int right = data[i];
int left = i - h;
while (left >= 0 && data[left] > right) {
data[left + h] = data[left];
left -= h;
}
data[left + h] = right;
}
h /= 3;
}
return data;
}