Python 排序算法之插入排序(3/8)

2018-05-11  本文已影响63人  Paycation

思想:
假如有列表:
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 结构。

要点:

  1. 由于是抽离一个数字出来并从第二项开始比,因此一开始就把第二项放入临时容器。
  2. 注意 while 中,是将 temp 和排好序的部分一一对比,而不是 lst[index],因为 index 会变化。
  3. while 中的第 2 条件很好理解。因为前面是 lst[index-1],显然 index-1>=0,因此 index >= 1。
上一篇 下一篇

猜你喜欢

热点阅读