3.排序算法03——插入排序

本文介绍了插入排序的基本思想,通过打牌的比喻解释了排序过程。代码示例展示了插入排序的Python实现,并讨论了时间复杂度。文章还提到了学习资源及个人实践中的代码调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 我觉得这个比喻很好...而插入排序的基本思路就是取第一个数作为“手牌”,接下来n-1个数看作摸到的牌,所以一共要摸n-1次。所以循环n-1次完成n-1次插入,每次把无序区第一个数取出从[i]开始往前比大小这样的循环一共进行n-1次从[1]位置到[len(n)-1]位置所以循环应该写成

for i in range(1,len(li)):

 拿出这个摸到的牌,和前面有序区(即手牌)的最后一项开始向前比大小以找到插入位置。

 就比如说我抽到了6这张牌,和7比,比7小,那么将7右移一格

 然后将6与5比大小,发现6比5大,就直接把6插入空位即可。这边要注意此时检索的j所表示的是“5”这个位置的下标,于是要在j+1的位置插入6。

 

 下面都同理

 

 

 

 

 时间复杂度为O(n2)

这边说明一下,我发现这个学习视频的代码好像完全照搬会有问题因为有时候他没有return却能输出,且@cal_time在我的python3.0里面好像不能用只能用time替代(详情请见4.快速排序),以下是我的程序:

def insert_sort(li):
    for i in range(1,len(li)):
        tem=li[i]
        j=i-1
        while j>=0 and li[j]>=tem:
            li[j+1]=li[j]
            j-=1
        li[j+1]=tem #在每次while之后j的值比刚刚完成的位子已经左移一格,所以+1
    return li

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

部分图片参考自b站IT编程界的扛把子的python算法学习视频,本文仅供个人学习使用,特此声明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值