Shell排序算法是D.L.Shell于1959年发明的,其基本思想是:先比较距离远的元素,而不是像简单交换排序算法那样先比较相邻的元素。这样可以快速减少大量的无序情况,从而减轻后续的工作。被比较的元素之间的距离逐步减少,直到减少为1,这时排序变成了相邻元素的互换。该方法实质上是一种分组插入排序方法。
先贴代码。
/*shellsort函数:按递增顺序对v[n]数组进行排序*/
void shellsort(int v[],int n)
{
int gap,i,j,temp;
//gap为比较的间隔,从n/2开始,一直到1
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;
}
}
以v[10]={49,38,65,97,76,13,27,49,55,4}为例,
第一个外循环,gap=5,分别比较(v[0],v[5]),