7.8希尔排序
首先请各位舰长们停止你们的联想,好好学习嗷!
内容来自尚硅谷Java数据结构与java算法(Java数据结构与算法)_哔哩哔哩_bilibili
写在前面:本文内容大致和原视频内老师的笔记内容相同,会偶尔插入自己的注释和理解,尽量会完成作业
7.8希尔排序
7.8.1简单插入排序存在的问题
看看简单的插入排序可能存在的问题
数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小) 这样的过程是
1被保存
arr = {2,3,4,5,6,6}
arr = {2,3,4,5,5,6}
arr = {2,3,4,4,5,6}
arr = {2,3,3,4,5,6}
arr = {2,2,3,4,5,6}
arr = {1,2,3,4,5,6}
结论:当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响
7.8.2希尔排序法介绍
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。
7.8.3希尔排序法的基本思想
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止
7.8.4希尔排序法的示意图


7.8.5希尔排序法的应用实例
{8,9,1,7,2,3,5,4,6,0} 请从小到大排序分别使用希尔排序的交换法和移动法,分别进行速度的测试
交换法:在分组中,当发现了2数的位置应该交换(逆序),就交换
简单说:有逆序就换,不停的重复,重复,再重复,效率低下
移动法:不马上交换,先后移,直到找到temp该去的位置,一次性插入即可
简单说:发现逆序了,先看找找自己应该插在那个位置,找到并确认了,只要一次插入就完成了,效率拉满
代码实现
抓紧时间好好学习嗷,等你学有所成了,参与制作mhy的游戏,多是一件美事啊