排序算法——希尔排序

一、介绍:

希尔排序是一种可以减少插入排序中数据比较次数的排序算法,加速算法的进行,排序的原则是将数据区分为特定步长的小区块,然后以插入排序算法对小区块内部进行排序,经历过一轮排序则减少步长,直到所有数据都排序完成。

演示:

首先步长step的值是用待查找的数据长度决定的,初始值为step = 待查找数据的长度/2

视频演示:

希尔排序更多实用攻略教学,爆笑沙雕集锦,你所不知道的游戏知识,热门游戏视频7*24小时持续更新,尽在哔哩哔哩bilibili 视频播放量 107、弹幕量 1、点赞数 0、投硬币枚数 0、收藏人数 1、转发人数 0, 视频作者 浅陌95sss, 作者简介 记录自己的学习成果,分享自己的快乐,相关视频:快速排序,冒泡排序演示,选择排序演示,学习记录--循环列表,直接插入排序演示,学习记录--网络状态机实现,学习记录--设计模式之命令模式,排行榜模拟,学习记录--Rpg雷达图,学习记录--BFS寻路算法https://www.bilibili.com/video/BV1eS4y15761/?spm_id_from=333.999.0.0运行代码:

cs 复制代码
  void ShellSort(int[] data)
  {
      int step = data.Length / 2;
      int preIdx , current = 0;
      while (step > 0)
      {
          for (int i = step; i < data.Length; i++)
          {
              preIdx = i - step;
              current = data[i];

              while (preIdx >= 0 && data[preIdx] > current)
              {
                  data[preIdx + step] = data[preIdx];
                  preIdx -= step;
              }
              data[preIdx + step] = current;
          }
          step = step / 2;
      }
  }
cs 复制代码
 void ShellSort2(int[] data)
 {
     int step = data.Length / 2;
     int preIdx, current = 0;
     while (step > 0)
     {
         for (int i = 0; i < data.Length - step; i +=step)
         {
             preIdx = i;
             current = data[i + step];

             while (preIdx >= 0 && data[preIdx] > current)
             {
                 data[preIdx + step] = data[preIdx];
                 preIdx -= step;
             }
             data[preIdx + step] = current;
         }
         step = step / 2;
     }
 }
相关推荐
宝贝儿好6 小时前
【强化学习实战】第十一章:Gymnasium库的介绍和使用(1)、出租车游戏代码详解(Sarsa & Q learning)
人工智能·python·深度学习·算法·游戏·机器学习
weixin_458872619 小时前
东华复试OJ二刷复盘2
算法
Charlie_lll9 小时前
力扣解题-637. 二叉树的层平均值
算法·leetcode
爱淋雨的男人9 小时前
自动驾驶感知相关算法
人工智能·算法·自动驾驶
wen__xvn9 小时前
模拟题刷题3
java·数据结构·算法
滴滴答滴答答10 小时前
机考刷题之 6 LeetCode 169 多数元素
算法·leetcode·职场和发展
Neteen10 小时前
【数据结构-思维导图】第二章:线性表
数据结构·c++·算法
礼拜天没时间.10 小时前
力扣热题100实战 | 第25期:K个一组翻转链表——从两两交换到K路翻转的进阶之路
java·算法·leetcode·链表·递归·链表反转·k个一组翻转链表
Swift社区11 小时前
LeetCode 400 第 N 位数字
算法·leetcode·职场和发展
再难也得平11 小时前
力扣239. 滑动窗口最大值(Java解法)
算法·leetcode·职场和发展