前言:
插入排序和希尔排序都是我们常用的排序方法,他们两个之间是层层递进的关系,接下来我来具体为大家讲解到底什么是插入排序和希尔排序以及说明这两个排序之间的关系!
内容:
一、插入排序
1、核心思想:就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据
2、举例:
假设六个数:2、0、3、5、1、4
(1)、首先假设第一个变量即2是一个有序列,然后从0开始,从右向左扫描。
(2)、发现2>0,所以将2向后移一位
(3)、将0放在挪出的位置,效果如下:
(4)、此时,0、2就是一个有序的数列了,然后拿3进行比较,按照上述方法,在有序数列从右向左扫描,发现么有比3大的数,所以3就不用动了。效果如下:
0、2、3、5、1、4
(5)、此时,0、2、3为有序的数列,然后拿5比较,5比有序数组中任何一个数都大,不用改动。
(6)、拿1进行比较,从有序数组中从右向左扫描,选择合适的位置插入,即可得到:
0、1、2、3、5、4
(7)、最后,按照上述方法将4插入到合适的位置,即可得到一个有序的数组:
0、1、2、3、4、5
这就是插入排序法,它的精髓就是将无序的数插入到有序的数组中,从而成为一个有序的数组。
二、希尔排序法(分组插入方法):
1、核心思想:
显然,如果数字非常多的时候,插入排序法显然不是个好方法,所以对插入排序法进行优化产生了希尔排序法。希尔排序法的关键是找一个关键字,百度上给的解释是:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。然而这个关键字怎么找,一般的初次取序列的一半为增量,以后每次减半,直到增量为1。
2、举例:
(1)、假设十个数为5.9.6.7.2.3.4.8.1.0
一共十个数,那我们先假设第一个关键字为5,进行分组,分组结果为:[5.3] [9.4] [6.8] [7.1] [2.0]
[5.3]:5>3,改变为[3.5]
[9.4]:9>4,改变为[4.9]
[6.8]: 6<8,不改变顺序
[7.1]: 7>1,改变为[1.7]
[2.0]: 2>0,改变为[0.2]
所以第一轮排序结果为3.4.6.1.0.5.9.8.7.2
(2)、假设第二个关键字为2,进行分组,分组结果为:[3.1.9.2] [4.0.8] [6.5.7],按照插入排序法将其排序为1.0.5.2.4.6.3.8.7.9
(3)、假设第三个关键字为1、显然现在已经是一个比较有序的数组了,接下来直接按照插入排序法进行分组即可
(4)、最终结果为0.1.2.3.4.5.6.7.8.9
这张图很好的解释了上述内容:
总结:
最后给大家推荐几个关于插入和希尔排序的小视频,非常生动有趣,可以帮助大家更好地理解!