排序算法---希尔排序---详解&&代码

希尔排序:

希尔排序:从整体宏观上有序逐步细节到局部的有序,希尔排序是一种改进版的插入排序,普通的插入排序算法中,是从第2个节点开始,依次插入到有序序列中,这种做法虽然“一次成形”,但研究发现时间效率上这么做并不划算。
希尔排序的时间复杂度为O(n*logn)
在这里插入图片描述
100个/2 = 50组 同组间隔50 每组元素是2个
50/2 = 25 同组间隔25 每组元素是4个
25/2 = 12 同组间隔12 每组元素是8 -----漏了后4个元素
12/2 = 6 同组间隔6 每组16个元素 — 还是漏掉了后4个
6/2 = 3 同组间隔3 每组32个元素 — 还是漏掉了后4个
3/2 = 1 同组间隔1 每组100个 — 最后一个看成特殊情况 直接全元素处理
1/2 = 0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码:

void Shellsort(int data[], int len)
{
    int gru;    //组数
    int i,j;
    //希尔排序的轮次循环
    for(gru = len/2;gru!=0;gru/=2)  
    {
        //根据组数找插排的起始的元素
        for(i=gru;i<len;i++)
        {
            //单独一组的插排--可能是交替插排
            int temp = data[i];
            for(j =i-gru;j>=0;j-=gru)
            {
                if(data[j] > temp)
                    data[j+gru] = data[j];
                else
                    break;
            }
            data[j+gru] = temp;
        }
    } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢饱饱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值