希爾排序是在簡單插入排序上做了改進。待排序系列長度記爲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)的算法。最差情況和最好情況效率相差不大。中小型規模可以先用該排序算法。