思想:
假如有列表:
5 4 3 1 2
想象 5 是已经排好序部分的第一项。因此从第 2 项 4 开始。
首先把 4 抽取出来,temp = 4,然后比较 temp < 5。将 5 后推 1 位,于是变成:
5 5 3 1 2
继续往前看,没有数字了,于是把 4 放回列表:
4 5 3 1 2
此时已经排好序的部分长度为 2 了。继续循环到 3 这个位置,装入容器 temp = 3,temp < 5,于是后推:
4 5 5 1 2
继续往前看,temp < 4,那么:
4 4 5 1 2
然后前面没有数字了,放回 temp:
3 4 5 1 2
... 后面以此类推。
代码实现如下:
def insert_sort(lst):
n = len(lst)
for i in range(1, n):
temp = lst[i]
index = i
while temp < lst[index-1] and index >= 1:
lst[index] = lst[index-1]
index -= 1
lst[index] = temp
return lst
记忆方式: for + while 结构。
要点:
- 由于是抽离一个数字出来并从第二项开始比,因此一开始就把第二项放入临时容器。
- 注意 while 中,是将 temp 和排好序的部分一一对比,而不是 lst[index],因为 index 会变化。
- while 中的第 2 条件很好理解。因为前面是 lst[index-1],显然 index-1>=0,因此 index >= 1。
网友评论