插入排序
以扑克牌为例进行讲解
- 初始时手里(有序区)只有一张牌
- 每次(从无序区)摸一张牌,插入到手里已有牌的正确位置
如下图:
假设我们现在手里有这样几张牌[2,1,5,3,7,9,8,4,6],2是我们手里的牌,而2后面的牌是我们要依次去摸的牌,规定我们每次只能摸一张牌,且手里的牌和摸到的牌需要根据从小到大顺序排列好,那么我们将实际问题以代码的形式展示:
def insert_sort(li):
for i in range(1,len(li)):#摸到的牌的下标,摸牌的次数
tmp = li[i]#tmp是摸到的牌
j = i-1 #手里的牌的下标
while j >= 0 and li[j] > tmp:
#手里牌的下标不能小于0且手里的牌大于所摸到的牌
li[j+1] = li[j]
j-=1
else:
#手里牌小于摸到的牌时,将摸到的牌的位置放到手里牌的右边
li[j+1] = tmp