Shell排序算法及C语言实现

来源:互联网 发布:淘宝网旋转拖把杆 编辑:程序博客网 时间:2024/05/25 16:38


        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]),(v[1],v[6]),(v[2],v[7]),(v[3],v[8]),(v[4],v[9]),结果为{13,27,49,55,4,49,38,65,97,76}。

第二个外循环,gap=2,分别比较(v[0],v[2],v[4],v[6],v[8]),(v[0],v[2],v[4],v[6],v[8]),即分别对其进行插入排序,结果为{4,27,13,49,38,55,49,65,97,76}。

第三个外循环,gap=1,结果为{4,13,27,38,49,49,55,65,76,97}。

0 0
原创粉丝点击