python直接插入排序

直接插入排序原理

(1)在未排序序列中,构建一个子排序序列,直至全部数据排序完成。
(2)将待排序的数,插入到已经排序的序列中合适的位置,使之在添加新元素之后,仍然是有序序列。(可以增加哨兵-表示每次待插入的元素)请添加图片描述
(说明:图片来自马哥教育-腾讯课堂)
增加一个哨兵位,每一轮比较将待比较数放入。
哨兵依次和待比较的前一个数据比较(从右往左),大数靠右移动,找到哨兵中值的插入位置。
每一轮结束后,得到一个从开始到待比较数位置的一个有序序列。

m_list = [[3,4,9,1,5,0,3,7,0,8,2,5,1,8,6],
         [5,6,3,-5,1,9,5,2,8,-6,7,4,0],
         [3,0,6,8,3,5,1,7,2,0,4,6,5,0,8,3]]
nums = [0]+m_list[1]   #[0]哨兵

sentinel, *origin = nums #python解包操作,将列表的第一个元素取出,把剩余的放在origin中
print(sentinel, origin) 

请添加图片描述

count_iter = 0#记录迭代次数

length = len(nums)
for i in range(2,length): #从2开始 默认nums[1]是有序序列
    nums[0] = nums[i]
    j = i-1
    count_iter += 1
    while nums[j] > nums[0]:
        nums[j+1] = nums[j] #依次往右移动
        j -= 1
    nums[j+1] = nums[0] #将哨兵插入,注意插入在右侧要加一
    
sentinel, *origin = nums
print(origin, count_iter)

运行结果如下:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值