希尔排序是在简单插入排序上做了改进。待排序系列长度记为N,增量d一般取从N/2, N/4, N/8...到1的序列。希尔增量的选取决定了排序的效率。将待排序系列中,元素下标间距为d的所有元素分为一组, 对每组进行简单插入排序。当d减少到等于1使,最后做一次简单插入排序。
如果对简单插入排序很熟悉,实现希尔排序难度不大
int shell_sort(int *p, int n)
{
int d, i, j, k;
for(d=n/2; d>0; d/=2)
{
for(i=d; i<n; i+=d)
{
k = p[i];
j=i-d;
while(j>=0 && p[j]>k)
{
p[j+d] = p[j];
j-=d;
}
p[j+d] = k;
}
}
}
希尔排序的效率优于O(n^2)的算法,差于O(n*lgn)的算法。最差情况和最好情况效率相差不大。中小型规模可以先用该排序算法。