插入排序-python

思路:

插入排序就像打扑克牌,从第一张牌开始,每抽一张牌,我们会把它与前面的牌比较,放到合适的位置。

针对无序列表,我们从第一个数开始,向后续列表逐个抽取数字,每抽取一个数字就保存该数字为tmp,然后逐个与前面的数字进行比较若tmp大于前一个数字那就将tmp插入其后面,本次插入结束,开始抽取下一个数字进行比较插入;若tmp小于前一个数字那就将前一个数字后移一位,tmp继续向前比较,直到前面无数字就插入第一个位置,本次插入结束,开始抽取下一个数字。

直到抽取完列表最后一个数字插入结束,排序完成。

 下图为排序示例:

 

 

 

 

以此类推,直到抽取完最后一个数字,插入完毕即为有序。

实现代码:

def InsertSort(li):
    for i in range(1, len(li)):  # 从第一个位置开始向后抽取数字
        tmp = li[i]  # 暂时保存数字
        j = i-1   # 前一个位置
        while j>=0 and tmp < li[j]:  # 当前一个位置下标不小于0 并且 tmp小于前一个位置的数时
            li[j+1] = li[j]  # 把前一个数后移一位
            j = j-1   # 继续向前比较
        li[j+1] = tmp  # tmp不小于前一个数时,插入其后面


li = [2, 1, 4, 6, 3, 5, 9, 7, 8]
InsertSort(li)
print(li)

 排序过程如图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onlywishes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值