Shell排序算法是D.L.Shell 於1959年發明的。其基本思想是:先比較距離遠的元素,而不是簡單交換排序算法那樣先比較相鄰的元素。這樣可以快速減少大量的無序情況,從而減輕後續的工作。被比較的元素之間的距離逐步減少,直到減少爲1,這時排序變成了相鄰元素的互換。
/*shellsort:sort v[0]...v[n-1] into increasing order*/
#include<stdio.h>
void shellsort(int v[],int n)
{
int gap,i,j,temp;
for(gap=n/2;gap>0;gap/=2)
for(i=gap;i<n;i++)
for(j=i-gap;j>=0&&v[j]>v[j+gap];j-=gap){
temp=v[j];
v[j]=v[j+gap];
v[j+gap]=temp;
}
}