新手笔记之希尔排序

  1. 简介:

    希尔排序是插入排序的一种,又称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因希尔(Donald Shell)与1959年提出而得名。

    希尔排序是基于插入排序的两点性质而提出改进方法的:

    1. 插入排序在对几乎已经排好序的的数据进行操作时,效率高,即可以达到线性排序的效率。
    2. 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。

    希尔排序为了加快插入的速度,让数据移动时可以实现跳跃移动,节省了一部分时间开支。

    希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。

  2. 算法步骤:

    • 根据数据的长度计算出第一个增量
    • 所有距离增量的倍数的数据为一组,在各组内进行直接插入排序。
    • 计算出第二个增量,再把所有距离增量的倍数的数据分为一组,进行直接插入排序。
    • 直至增量为1,算法结束。
  3. 代码实现:

    void shellsort(int data[], int len)
    {
           //i为增量 ,增量取数组的1/3到中间的长度
           for (int i = len / 2; i > 0; i /= 2)
           {
                  //从增量开始往后循环
                  for (int j = i; j < len; j ++)
                  {
                         //减去增量就得到改组的前一个数据
                         for (int x = j - i; x >= 0; x-=i)
                         {
                               //判断两个数的大小,交换两个数的位置
                               if (data[x] > data[x + i])
                               {
                                      int temp;
                                      temp = data[x];
                                      data[x] = data[x + i];
                                      data[x + i] = temp;
                               }
                         }
                  }
       }
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值