插入算法讲解

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

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

比如

[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比较小的时候也比较适合插入排序

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值