算法导论-插入排序

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 

算法流程图示

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,237评论 0 52
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    闲云清烟阅读 773评论 0 6
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,288评论 0 2
  • 窗外小鸟 已无处停脚 双翅湿漉 已无力飞翔 四目相视时 只充满空洞 向往自由时 只翱翔于蓝天 羽毛...
    都說姷點儍阅读 199评论 0 0
  • 墨语添香阅读 1,145评论 6 13