排序算法之---希尔排序(一看你就懂滴)
一、什么叫“希尔排序”
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。
重点度已经帮你们标黄啦啦,忘了什么叫插入排序咋搞? 没关系,点它直达
二、算法思想
-
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 =1( < …<d2<d1),即所有记录放在同一组中进行直接插入排序为止。(百度官方解释,看不懂没关系,往下看你就懂了) 实质上是一种分组插入排序 一般的初次取序列的一半为增量,以后每次减半,直到增量为1。(这里说的是一般,因为这个算法的复杂度与增量序列的大小有关)
三、看动图演示
- 数组假设如下:
- 演示: Gap=1时,因为上面排完,数组部分已经有序,所以接下来的完整数组进行插序时效率很高。
- 解析说明:
第一次:Gap = 6 / 2= 3(数组长度除以2,这里用Gap来表示增量,取整来处理) 第二次:Gap = 3 /2 = 1(增量为1,相当于一个完整数组进行插入排序,但是此时数组部分有序程度已经很高了,所以插入速度很快)
四、上代码
Java老大哥:
Python新竞老大哥:
五、分享交流
- Java web从入门到精通电子书
- Python机器学习电子书
- Python400集(北京尚学堂)
- JavaScript项目案例、经典面试题
- Java300集(入门、精通)
- Java后端培训机构录集(同事培训内部提供)
下一篇:
逆波兰计算器的Java实现