直接插入排序法

old_num = [99,88,128,23,18,75,8,12,30,13,19,87]
new_num = [0] + old_num
#[0, 99, 88, 128, 23, 18, 75, 8, 12, 30, 13, 19, 87]

#[88, 99, 88, 128, 23, 18, 75, 8, 12, 30, 13, 19, 87]      88位哨兵 将原列表88前的依次从右往左和哨兵88比较

#[128, 88, 99, 128, 23, 18, 75, 8, 12, 30, 13, 19, 87]
l = len(new_num)
print(new_num)
for i in range(2,l):  #从2开始
    j = i -1
    new_num[0] = new_num[i]  #索引为i的数依次设置为哨兵
    print(new_num[0])       #大数右移,
    if new_num[j] > new_num[0]:
        while new_num[j] > new_num[0]:  #当有序序列中大于哨兵的数时右移,小于哨兵的数退出循环
            new_num[j+1] = new_num[j]  #将有序序列中依次右移
            j -= 1
    new_num[j+1] = new_num[0]         #放置哨兵
    print(new_num)
new_num.pop(0)  #删除最后的哨兵
print(new_num)

  

posted @ 2018-09-16 16:32  %华&仔%  阅读(54)  评论(0)    收藏  举报