美文网首页
算法导论-插入排序

算法导论-插入排序

作者: Vagitus | 来源:发表于2018-02-07 21:21 被阅读0次

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

相关文章

  • lecture 1

    算法导论Lesson1 课程简介: 内容主要包括: 算法的含义、意义的简要介绍; 算法的分析; 插入排序、合并排序...

  • 2018-08-08 算法导论(2.1 插入排序)

    算法导论学习101 首先,对于插入排序算法的大致描述为下输入为: < a1, a2, a3, ... , an >...

  • 第1天-插入排序

    算法说明 插入排序是算法导论一书中第一个算法,在书中举了一个非常恰当的扑克牌例子来说明插入排序的算法原理:Inpu...

  • 算法导论-插入排序

    1.伪代码 算法流程图示 2.Python代码 result: 循环不变性: 初始化: 循环的第一次迭代之前,他为...

  • 插入排序【算法导论】

    注:学习算法导论,按照标准伪代码理解翻译为java实现,如有兴趣理解整个过程的细节,建议阅读《算法导论》第二章:2...

  • 讨厌算法的程序员 1 - 插入排序

    讨厌算法的程序员系列入口 什么是算法 在说插入排序之前,我们了解下《算法导论》对算法的从两种不同角度的定义。 一般...

  • 排序算法入门之「插入排序」

    插入排序 借用《算法导论》里的例子,就是我们打牌的时候,每新拿一张牌都会把它按顺序插入,这,其实就是插入排序。 齐...

  • 算法导论-算法基础-插入排序

    插入排序 输入:n个数的一个序列 。输出:输入序列的一个排列 ,满足a1'≤a2'≤…≤an'。 j表示正准备插入...

  • 计数排序、基数排序和桶排序

    阅读经典——《算法导论》07 到目前为止,我们已经介绍了插入排序、归并排序、堆排序、快速排序这四种排序算法,他们的...

  • 算法导论1.2 插入排序

    这个小结主要是用插入排序法,讲了一下什么是“循环不变式”,这个方法主要是用来证明你的算法是OK的,用python实...

网友评论

      本文标题:算法导论-插入排序

      本文链接:https://www.haomeiwen.com/subject/opaazxtx.html