图解算法---希尔排序

在网上看到一篇写的很不错的希尔排序讲解,我转发一下帮助更多的同学学习一下。如果侵权我会删除的。

转载自:https://blog.csdn.net/qq_39207948/article/details/80006224

前情回顾:直接插入排序(对插入排序不熟悉的建议先阅读此文)

一天,一尘拿着扑克自己在那玩,刚被师傅看见了

首先它把较大的数据集合分割成若干个小组(逻辑上分组),然后对每一个小组分别进行插入排序,此时,插入排序所作用的数据量比较小(每一个小组),插入的效率比较高

可以看出,他是按下标相隔距离为4分的组,也就是说把下标相差4的分到一组,比如这个例子中a[0]与a[4]是一组、a[1]与a[5]是一组...,这里的差值(距离)被称为增量

每个分组进行插入排序后,各个分组就变成了有序的了(整体不一定有序)

此时,整个数组变的部分有序了(有序程度可能不是很高)

然后缩小增量为上个增量的一半:2,继续划分分组,此时,每个分组元素个数多了,但是,数组变的部分有序了,插入排序效率同样比高

同理对每个分组进行排序(插入排序),使其每个分组各自有序

最后设置增量为上一个增量的一半:1,则整个数组被分为一组,此时,整个数组已经接近有序了,插入排序效率高

同理,对这仅有的一组数据进行排序,排序完成

随后一尘写出了插入arr[i]到所在组正确位置的代码(insertI)

希尔排序的复杂度和增量序列是相关的

{1,2,4,8,...}这种序列并不是很好的增量序列,使用这个增量序列的时间复杂度(最坏情形)是O(n^2)

Hibbard提出了另一个增量序列{1,3,7,...,2^k-1},这种序列的时间复杂度(最坏情形)为O(n^1.5)

Sedgewick提出了几种增量序列,其最坏情形运行时间为O(n^1.3),其中最好的一个序列是{1,5,19,41,109,...}

说完,一尘继续玩起了扑克。

希尔排序--简单易懂图解相关推荐

  1. Go 实现希尔排序算法及图解

    耐心和持久胜过激烈和狂热. 哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 实现希尔排序算法.如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有 ...

  2. 栈应用-逆波兰表达式(CPP实现简单易懂图解)

    栈应用-逆波兰表达式(后缀表达式) 逆波兰表达式定义: 在由运算符(operator)和操作数(operand)组成的表达式中不使用括号(parenthesis-free)即可表示带优先级的运算关系 ...

  3. 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...

    码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...

  4. 中希尔排序例题代码_超全面分析十大排序算法

    点击上方"零一视界",选择"星标"公众号 资源干货,第一时间送达 作者 | 不该相遇在秋天 责编 | 程序员小吴 前言 本文全长 14237 字,配有 70 张 ...

  5. 【恋上数据结构】希尔排序

    希尔排序 前言 希尔排序思路 实例图解 列的划分思路 步长序列计算代码 希尔排序完整实现 步长序列优化 插入排序优化 复杂度和稳定性 经典的十大排序算法! 前言 请务必看一下这个:排序算法前置知识+代 ...

  6. 希尔排序听起来有点难,其实很简单

    前言 直接插入排序当待排序数据的顺序和期望排序结果相反时,排序效率是最差的:上次聊到的折半插入排序只是减少有序列表的比较次数,而对于整体数据遍历次数还是没有得到优化:接下来要说的希尔排序就是针对整体数 ...

  7. 希尔排序----附图解(C语言)

    目录 一.简介 二.代码部分 2.1完整代码 2.2代码输出结果 三.代码部分分析 3.1核心代码 3.2代码运行部分的过程(附图解) 四.总结 一.简介 中文名:希尔排序 英文名:Shell's S ...

  8. 排序算法图解(四):希尔排序

    文章目录 1 希尔排序简介 2 希尔排序算法图解 3 希尔排序代码实现 写在最后 1 希尔排序简介 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种特殊的插入排序, ...

  9. 【排序综合】直接插入排序,希尔排序,快速排序,堆排序,冒泡排序,简单选择排序的简介,实现和算法复杂度分析

    目录 1. 直接插入排序 1.1 直接插入排序简介 1. 什么是直接插入排序 2. 排序思想 1.2 排序实现 1. 排序代码 2. 复杂度分析: 3. 运行结果: 1.3 学习链接 2. 希尔排序( ...

  10. 八大排序(一):四种简单的排序(直接插入排序、希尔排序、冒泡排序、选择排序)

    源码地址: https://github.com/TimePickerWang/aimed-at-offer/blob/master/java%E6%BA%90%E7%A0%81/Sort.java ...

最新文章

  1. Nessus提示API Disabled错误
  2. a++浏览器_走进浏览器内部—剖析浏览器是如何工作的(上)
  3. dotnet new 命令安装模板
  4. SQL SERVER备份脚本
  5. Python之线程(二)
  6. win8.1重装系统计算机管理打不开,Windows8计算机打不开192.168.0.1怎么办
  7. JMeter基础教程1:若隐若现的参数化
  8. 汽车类自媒体怎么找素材?这几个办法很好用
  9. 西门子TIA PORTAL (博途/STEP 7 )安装反复要求重新启动 STEP7 Basic的许可无法彻底完成
  10. 评论系统--开发总结
  11. OpenGL中phong光照模型详解
  12. 基于STM32F103C8T6的充电桩计费系统(程序+原理图+PCB+论文)
  13. 网络 | NAT、SNAT、DNAT
  14. 企业微信 android2.3,企业微信2.3版本发布
  15. 传说中的“睡眠算法”的输出分析
  16. RabbitMQ之mandatory和immediate介绍
  17. MergeSort和QuickSort的比较
  18. ssh 使用密匙登录服务器
  19. css怎么修改img的图片内容
  20. span标签内使用icon图标,icon和文字位置水平对齐

热门文章

  1. Vue路由守卫(通俗易懂)
  2. 软件测试常见的风险,软件测试中常见的风险分析
  3. 英特尔老款CPU支持虚拟化对照表(转)
  4. excel 某个单元格不是等于空值,Excel返回第一个与所有非空单元格及统计数量,把空单元格替换为0...
  5. 基于Quartz实现定时任务-框架学习
  6. 氪金玩家逸仙电商的高端困境
  7. 台式机计算机怎么分割,台式机如何设置分屏
  8. 云存储及分布式文件系统
  9. 研究生学习生活日记——第二次组会
  10. win7 usb功能被禁用的解决方法