插入算法讲解

什么是插入算法,顾名思义,具有插入操作的算法

举个生活中的例子,我们平时打扑克牌的时候,习惯性的按照点数的大小进行排序,我们先看到一个牌,然后需要把这个牌和这个牌所在位置的前面所有位置的牌进行一个对比,插入到他能插入的最前面位置。

比如

[10, 9, 7, 5, 6, 3]

第一遍,选第一张牌10:

首先我们拿到第一张牌,是10,因为是第一张,所以不需要排序,保持顺序[10, 9, 7, 5, 6, 3]

第二遍,选第二张牌9

我们看了第二张牌,是9,我们需要排序,把9插入所在位置的前面的牌中最前面,因为前面只有10,而10比9大,所以插到10前面,结果是[9, 10, 7, 5, 6, 3]

第三遍,选第三张牌7

因为7的位置是3,需要跟位置比3小的(1,2)做比较,也就是和数据集【9,10】做比较,得到[7, 9, 10, 5, 6, 3]

……以此类推

得到我们最终想要的结果[3, 5, 6, 7, 9, 10]

注意:位置n需要和0~n-1位置的所有的元素进行比较,比较的方式是倒序,也就是先和n-1比较,如果n比n-1小,则互换位置,来到n-1的位置,然后n-1和n-2比,一直比到大于等于即可。(因为前面的元素是排序好的,所以比较一遍即可)

时间复杂度: 
1. 最好情况:O(n) 
2. 平均情况:O(n^2) 
3. 最坏情况:O(n^2) 
空间复杂度:O(1) 
稳定性:稳定(相同元素的相对位置不会改变)

实现方案如下:

java实现插入算法

python实现插入算法

go实现插入算法

注意:

1)数据基本有序的情况下比较适合插入排序

2)n比较小的时候也比较适合插入排序

 

你可能感兴趣的:(算法与数据结构,算法和数据结构)