插入排序:以打扑克牌的时候摸牌在手里面排序为例,一开始定义一张牌在手里,摸一张牌就和手里面的牌进行对比,如果比手里面这张牌大就插到手里面那张牌的右边,反之插到左边。当摸到第三张牌的时候,把第三张牌与手里面的每张牌进行对比,把它插到应该的位置,以此类推。
插入排序的过程
1.模拟摸牌的过程
2.摸到牌比自己手里面最后一张牌大的话就插到手里面牌的最后(即放到原来的位置不用管)
3.摸到的牌比自己手里面的最后一张牌小的话就将手里面的牌向后移动一位,在和手里面的牌的倒数第二张再进行比较,如果还小的话再次进行移位比较,一直找到它该放的位置
代码实现:
def insert_sort(li):
# 这里的循环就是摸牌的动作,对整个列表进行摸牌,从第二张牌开始
for i in range(1,len(li)):
# j 就是指手里的牌 而且是最后一张
j = i - 1
# 因为需要插入操作,数据可能被覆盖,所以需要一个参数进行储存
tmp = li[i]
# 这里的循环是指当摸到的那张牌比手里面小的话,进行和手里面的牌从右至左进行对比,找到它该插入的位置
# 因为要和手里面的牌进行对比,手里面的牌最小的下标是0,所以要保证j不会越界
while tmp < li[j] and j >= 0:
# 如果摸到的那张牌比手里面的牌小的话就和手里面的牌进行比较,手里面的牌比摸到的牌大的话就将手里面的牌像右移动一位
li[j + 1] = li[j]
j -= 1
# 这里的赋值就是指当摸到的牌