Shell排序算法及C语言实现

Shell排序算法由D.L.Shell于1959年提出,采用分组插入排序方式,通过比较远距离元素减小无序状态,逐步减少gap至1,最终完成排序。文章介绍了算法思想并给出了C语言实现过程。


        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]),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值