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)

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

你可能感兴趣的:(python,排序算法,数据结构,算法,python)