我们先归纳性地假设前 n−1 个元素已经完成排序,现在要将第 n 个元素插入到正确位置。
如下为递归版的插入排序的代码清单:
# n == len(seq)-1, seq[n] 表示序列的最后一个元素
def ins_sort_rec(seq, n):
if n == 0: return
ins_sort_rec(seq, n-1)
j = n
while j > 0 and seq[j-1] > seq[j]:
seq[j-1], seq[j] = seq[j], seq[j-1]
j -= 1
幸运的是,任何递归函数都可以被重写成相应的迭代操作(反之亦然)。
如下是我们更为熟知的迭代版的插入排序,它将后退式递归调用改成了从第一个元素开始的前进式迭代操作:
def ins_sort(seq):
for i in range(1, len(seq)):
j = i
while j > 0 and seq[j-1] > seq[j]:
seq[j-1], seq[j] = seq[j], seq[j-1]
j -= 1