一.基本思想
希尔排序,也叫递减增量排序,是插入排序的改进版本
插入排序对于几乎已经排好序的序列进行排序时几乎可以达到线性,但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位 所以希尔排序先将序列分为几个增量区域来分别的进行插入排序,最后对整个序列进行排序
二.概览
分类:比较排序
数据结构:数组
最差时间复杂度:O(n^2)
最优时间复杂度:O(n)
平均时间复杂度:O(n^1.3)
所需辅助空间:O(1)
稳定性:不稳定
三.代码实现
public class Shell {
public static void sort(int a[]){
int N = a.length;
for (int D=N/2;D>0;D/=2){ //增量函数-每次增量减少一半
for (int i=D;i<N;i++){
for (int j=i;j>=D&&a[j]<a[j-D];j-=D){
int t = a[j];
a[j] = a[j-D];
a[j-D] = t;
}
}
}
}
}