插入排序(Python)

插入排序(InsertionSort),一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。为什么这样说呢?因为他的时间复杂度为O(n^2)

举个例子理解吧 扑克牌大家都玩过吧 插入排序和整理牌很类似,只要找到摸到的牌在手里的牌的具体位置就好喽 下面我用图示给大家演示一下

初始时手里的牌(有序区)只有一张,每次从(无序区)摸一张牌插入到手里的牌(有序区)的正确位置

 

5是手里的牌(有序区,后面的全是要摸的牌(无序区),7为下一张要摸的牌。

 摸出这张牌与手中的牌比较若比手中的牌大放到这张牌前面,7比5大放在5前面。下一张牌为4。

 4与手中的第一张牌7比较,4比7小7往前走一位,将手中的牌向后看一位看到5了,4也比5小5也向前走一位,空出一位留给4,将4插入

插入后列表为下图

 

接下来同理

 最终结果为:

 接下来我们要做的就是要用代码实现它啦

​
def insert_sort(lst):
    'i代表摸的牌的下标'
    for i in range(1,len(lst)):
        temp = lst[i]
        'j代表手中的牌的下标'
        j=i-1
        while j>=0 and temp<lst[j]:     # 得保证有牌可找
            lst[j+1]=lst[j]    # 手中的牌往前插
            j-=1    # 向后寻找比temp小的数
        lst[j+1]=temp   # 找到后插入比它小的牌前 或者是手中的牌都比摸到的牌大j=-1时 摸到的牌被当作第一张牌

lst=[5,7,4,6,3,1,2,9,8]
insert_sort(lst)
print(lst)
​

注意一点哦 当手中的牌找到0时 j-1=-1 代表无牌可找了,自然摸的牌要被放到lst[0]的位置上

当然,为了更好的观察这个过程可以在每次循环后print一下

def insert_sort(lst):
    'i代表摸的牌的下标'
    for i in range(1,len(lst)):
        temp = lst[i]
        'j代表手中的牌的下标'
        j=i-1
        while j>=0 and temp<lst[j]:     # 得保证有牌可找
            lst[j+1]=lst[j]    # 手中的牌往前插
            j-=1    # 向后寻找比temp小的数
        lst[j+1]=temp   # 找到后插入比它小的牌前 或者是手中的牌都比摸到的牌大j=-1时 摸到的牌被当作第一张牌
        print(lst)


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

结果为

这就是插入排序。

🌸🌸🌸🌸🌸🌸完结撒花!🌸🌸🌸🌸🌸🌸

如有疑问或错误,欢迎大家评论区留言指出,谢谢支持!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值