【算法】希尔排序C语言实现

2023-10-26


上一篇文章我们一起学习了直接插入排序,它的原理就是把前i个长度的序列变成有序序列,然后循环迭代,直至整个序列都变为有序的.但是说来说去它还是一个时间复杂度为(n^2)的算法,难道就不能再进一步把时间复杂度降低一阶么?可能有很多同学说快速排序,堆排序,我都会,这些简单的插入排序我都不屑于用.确实,以上几种算法相对于之前的O(n^2)级别的算法真的是弱爆了,效率可能还会差上千万倍,但是我们不妨翻看一下历史,你就会感觉每一种算法的出现都是很可贵的.


1959年D.L.Shell正式提出了我们今天的主角shell算法,这是相当酷的一件事情,为什么这么说呢?因为shell排序时第一个突破了O(n^2)时间复杂度的排序算法,这应该是排序算法历史上比较闪耀的时刻了,因为在1959年之前的相当长的一段时间里,各种各样的排序算法无论是怎么花样繁多,都始终无法突破O(n^2)雷池一步,在当时直接插入排序已经是相当优秀的了,而排序算法不可能突破O(n^2)的声音成为了当时的主流.


看见了这段历史之后你有什么感受呢,我们在课堂上不愿意学的算法确仍然是科学家们多年苦苦思索才发明出来的,是不是觉得他们很不容易呢?其实你也没必要内疚啦,即使你曾经对它不屑一顾过,没有认真的学它,So what?现在开始学也不晚是不是?


希尔排序是基于插入排序的以下两点性质而提出改进方法的:
  • 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。
  • 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。


其实直接插入排序并不是那么逊的,它在待排序数据基本有序并且数量较少的时候威力还是很大的,甚至比一些高级算法还要高效.对于第二点,我只能说这就是我们shell算法的牛逼的地方了,插入排序每次只能移动数据一位,而shell算法成功的解决了这个问题.


shell算法的核心还是分组,但是这个分组就有门道儿了,因为它会实现取一个小于总数据长度的整数值gap作为分组的步长,什么意思呢?假如我们的待排序数组为:

序号  1      2     3      4      5     6      7      8     9     10

49,38,65,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【算法】希尔排序C语言实现 的相关文章

随机推荐

  • 【第04例】IPD进阶

    目录 前言 专栏目录 内容详解 IPD 相关专栏推荐 华为流程体系 CSDN学院相关内容
  • pytorch使用masked掩盖某些值(筛选值)

    mask主要用来根据一定条件 筛选出一部分值来 基本案例 import torch x torch randn 3 4 mask 1 x ge 0 5 大于0 5的为True 小于0 5的值为False mask 2 torch BoolT
  • Deeplabcut教程(二)使用

    因为很久没用这个了所以就一直没更使用教程 写的安装教程收到好几条私信要使用教程 这几天在帮一个朋友跑这个 于是就有了这个使用教程 安装教程 Deeplabcut教程 一 安装 GPU CPU版本 纯新人向 CSDN博客 Step 1 启动
  • ubuntu交叉编译工具arm-linux-gcc安装

    1 安装交叉编译工具 arm linux gcc 安装包4 4 6 TQ210 release 20120720 tar bz2 环境 ubuntu 20 版 已换清华源 1 1解压文件 提取解压1 1 6到home目录 1 2配置环境 打
  • Unkonw column ‘xxx‘ in ’field list‘错误

    Unkonw column xxx in field list 错误 当使用jpa进行数据库操作时 数据库中的数据为 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 6I9QHwpX 1680000912061
  • Anaconda/jupyter notebook修改虚拟环境名称

    1 找到用户文件夹下的txt文件 比如C Users your username conda environments txt windows平台 找到当前主用户文件夹 有一个 conda文件夹 里面有一个environments txt文
  • 我的2012移动开发年度总结——革命的一年

    2012年 是我在移动行业畅游的一年 这一年发生了很多事 人生三大事之一结婚 评选csdn专家荣誉称号 坚持写博客写了一年 对手机这个行业总算有了个大体的认识 但是还有一些不顺人意的事 这里就不说了 但有一件事不得不说 在这家公司上班以来
  • QWidget尺寸限定

    1 控件只能在最小和最大之间进行调整 不能超过范围 直接宽高同时设置 window setMinimumSize 200 200 window setMaximumSize 500 500 app QApplication sys argv
  • unity3D游戏开发十之粒子系统

    Shuriken粒子系统是Unity3 5版本新推出的粒子系统 它采用模块化管理 个性化的粒子模块配合粒子曲线编辑器使用户更容易创作出各种缤纷复杂的粒子效果 依次打开菜单栏中的GameObject gt Greate Other gt Pa
  • win10 python如何安装requests———超详细教程

    第一步 先检查你的python安装路径下的Scripts文件里有没有东西 我一开始查看时发现竟然是空白的 去搜寻了答案 python安装文件中 Scripts文件夹中没有文件目录 空白 注 我只是操作了该教程中的第二步 在cmd中输入pyt
  • 区块链的核心:共识机制

    我在上一篇 区块链到底是怎么运行的 一文中 提到了 打包交易 和 广播交易 这两个概念 其实 以上谈到的两个内容正是区块链最核心的技术内容之一 共识机制 在今天的文章中 我们就展开聊一聊区块链共识机制到底是什么 以及区块链的共识过程到底是怎
  • 几种排序算法比较

    前言 排序是按照关键字的非递减或非递增顺序对一组记录重新进行排列的操作 是对无规律的一组序列转化为递增或递减的操作 排序的稳定性 当排序记录中的关键字都部相同时 则任何一个记录的无序序列经过排序后得到的结果都唯一 反之 若存在两个或多个关键
  • 如何进行测试微服务?

    在许多方面 测试微服务应用程序与测试使用任何其他体系结构构建的应用程序没有什么不同 微服务面临的独特挑战是组成应用程序的服务数量之多 以及服务之间的依赖关系数量 作为用于构建复杂系统的体系结构 微服务在开发社区中获得了巨大的关注 尽管人们开
  • 论文理解【IL - IRL】 —— Deep Reinforcement Learning from Human Preferences

    标题 Deep Reinforcement Learning from Human Preferences 文章链接 Deep Reinforcement Learning from Human Preferences blogpost L
  • 基于A*算法自动引导车的路径规划(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 动汽车动力系统复杂 行驶工况多变 能耗管理是其研
  • ajax aftersuccess,Ajax jquery success scope

    问题 I have this ajax call to a doop php function doop var old this siblings old html var new this siblings new val ajax u
  • Java 的 Class 文件格式——解析魔数和版本号

    解析 Java 的 Class 文件格式 解析魔数和版本号 作者 陈跃峰 出自 http blog csdn net mailbomb 熟悉 Java 语言有好几年了 技术也学了一些 现在主要从事 J2ME 技术方面的工作 最近工作不是很忙
  • 小学老师工资多少一个月_教师一个月工资是多少? 全国各地教师工资一览

    教师 被誉为人类灵魂的工程师 一直以来教师工资改革都是民生很关注的问题 据获悉 目前中小学教师基本工资都将得到相应的提高 那么 教师一个月工资是多少呢 下面我们来看看全国各地教师工资一览表 教师一个月工资是多少 教师一个月工资是多少呢 全国
  • Python究竟是个啥?为什么985的学生都在学它?早就该曝光了

    现在网上一搜学Python能做什么 无一例外地全跳出来一堆的专业名词 看的时候虎躯一震 看完之后 依然不知道学会了能干啥 不知道大家是不是也有同样的感受 为了解决大家这种困惑 我今天特意花时间总结了一些学完Python能做的工作 力求用最通
  • 【算法】希尔排序C语言实现

    上一篇文章我们一起学习了直接插入排序 它的原理就是把前i个长度的序列变成有序序列 然后循环迭代 直至整个序列都变为有序的 但是说来说去它还是一个时间复杂度为 n 2 的算法 难道就不能再进一步把时间复杂度降低一阶么 可能有很多同学说快速排序