//希尔排序
//时间复杂度 O(N^1.3—N^2)
//空间复杂度 O(1)
public static void shell(int[] array) {
int gap = 1;
while (gap * 3 + 1 < array.length) {
gap = gap * 3 + 1;
}
while (gap > 0) {
for (int i = gap; i < array.length; i = i + gap) {
int tmp = array[i];
int j = i - gap;
while (j >= 0 && tmp < array[j]) {
array[j + gap] = array[j];
j = j - gap;
}
array[j + gap] = tmp;
}
gap = (gap - 1)/3;
}
}
插入排序越有序,越快速,希尔排序就是对插入排序的优化, 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果