希尔排序与插入排序的唯一区别就是增加了分组gap增量的遍历条件,gap一般默认为数组长度一半值,然后逐轮gap /=2 递减,即相互的分组间隔逐轮变小。最后对分组的数组进行逐轮插入排序,即为希尔。
希尔排序由于分组缘故改变了数组间的顺序,所以不稳定。插入排序是稳定的。
核心代码:
public void shellSort(){
for(int gap = a.length/2;gap>0;gap/=2) { // 对比插入排序 只增加了这个遍历条件
for (int i = gap; i < a.length; i++) { // 此块插入排序 i=1改成了i=gap
int insertVal = a[i];
int leftIndex = i - 1;
while (leftIndex >= 0 && a[leftIndex] > insertVal) {
a[leftIndex + 1] = a[leftIndex];
leftIndex--;
}
a[leftIndex + 1] = insertVal;
}
}
System.out.println(Arrays.toString(a));
}