算法导论-插入排序

1.伪代码

'''INSERTION-SORT(A)'''
    for j = 2 to A.length
        key = A[j]
        //Insert A[j] into the sorted sequence A[1..j-1]
        i = j - 1
        while i > 0 and A[i] > key
            A[i+1] = A[I]
            i = i - 1
        A[i+1] = key 

算法流程图示

算法导论-插入排序_第1张图片

2.Python代码

def insertion_sort(A):
    for j in range(1, len(A)):
        key = A[j]
        # Insert A[j] into the sorted sequence A[1..j-1]
        i = j - 1
        while i >= 0 and A[i] > key:
            A[i+1] = A[I]
            i = i - 1
        A[i+1] = key
    return A

result:

Before: 
[29, 76, 65, 27, 75, 81, 1, 44, 77, 61]
After: 
[1, 27, 29, 44, 61, 65, 75, 76, 77, 81]

循环不变性:

  1. 初始化: 循环的第一次迭代之前,他为真.
  2. 保持: 如果循环的某次迭代之前为真, 下次迭代之前仍为真
  3. 终止: 循环终止时,不变式提供一个有用的性质证明算法的正确性

对于插入排序算法:

  1. 初始化: 循环之前,排序好的数组即原数组第一个数字,为单个元素A[1]
  2. 保持: 每次循环,排序好的数组中比要插入的数大的右移,循环结束,插入数字,对于下一次循环来说子数组仍是有序的
  3. 终止: 导致终止的条件是 j > A.length, 终止后,原数组的数字都已插入字数组,且是有序的,所以算法正确

欢迎关注我的博客Vagitus – Pythonista

你可能感兴趣的:(算法导论-插入排序)