基本思想是:
先对隔得比较远的元素进行比较,而不是像简单交换顺序算法中那样比较相邻的元素。

这样可以快速地减少大量的无序情况,以后就可以少做些工作。各个被比较的元素之间的距离在逐步减少,一直减少到1,此时排序变成了相邻元素的互换。

/*以递增顺序对v[0]、v[1]、......、v[n-1]进行排序*/
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;
            }
}

 

posted on 2013-06-04 17:10  欧小弟  阅读(146)  评论(0编辑  收藏  举报