希尔排序--Shell sort(为什么道理都懂,就是代码不懂)

希尔排序是一种改进的插入排序,通过增量序列分组进行排序,降低比较和移动次数以提高效率。文章详细介绍了希尔排序的思想、操作过程,并提供了代码设计、实现与解读,适合初学者理解掌握。
摘要由CSDN通过智能技术生成

  果然能用名字来命名的知识都是大神级别的。最近学习了希尔排序,写一篇文章总结一下,相信你看了会有很大收获。
  声明一点本处的增量选择采用的是希尔建议的方式,而更好的方式是采用互质的增量序列。选择这样的目的是不增加代码的复杂性,从而更好的理解希尔排序。一旦我们理解了基本原理,其余的都是很好解决的,一起来看看。


一.前言

  我们都知道插入排序按查找位置的方式不同,又可以分为三类:采用顺序法查找插入位置——直接插入排序;采用折半(二分)查找法查找插入位置——折半(二分)插入排序;缩小增量多遍插入排序——希尔排序
  同时插入排序的效率是由比较次数和移动次数共同决定的。

直接插入排序:
  如果原始数据越接近有序,直接插入排序效率较高(即逆序个数越少越快);在待排序的记录个数较少时,效率较高。直接插入排序是一种稳定的插入排序
折半插入排序:
  该方法相对直接插入排序,降低 了比较的次数,但是没有降低移动的次数。平均性能来说比直接插入排序要好。该方法也是一种稳定的插入排序。

  那么有没有一种方式即能降低比较次数又能降低移动次数,答案就是希尔排序
  希尔排序也称为缩小增量排序增量指的是按照某一种约定对数据进行分组,比如将数据5个5个的分为一组。缩小增量也就指按某种约定将分组的范围缩小,直到增量为1。


二.思想及操作

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

希尔排序图解:
在这里插入图片描述

  有如上所示图,第一排为数组下标,第二排代表每个数组位置所对应存储的数据,现在要从小到大对该数据进行排序。我们按照希尔排序的发明者Donald Shell所建议的选择增量序列的方式:初始增量为数据个数的一半,之后的每一次都变为二分之一,直到增量变为1

第一次按增量为6(13/2=6)进行分组

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值