• 插入排序
    • 原理:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序。
    • 代码实例:
     算法导论之算法基础
  • 循环不变式
    • 目的:主要是来帮忙我们理解算法的正确性;
    • 证明:
      1. 循环的第一次迭代之前,它为真;
      2. 循环的某次迭代之前为真,那么下次迭代之前也为真;
      3. 循环终止时,也为真
    • 结论:只要证明中的三点成立,那么就可以证明我们插入算法的正确性;
  • 我们需要怎么做呢??
  • 声明2个数组,一个原数组(未正确排序的数组),一个子数组(已经排序的数组);
    • 第一点证明:第一次迭代之前,也就是i=1之前;因为第一次是不需要做比较的,因为第一次插入的时候子数组里面就一个数据,没有其他数据做比较,并且当前插入的数据和原来的数组一样,只是已经排好顺序了,所有成立。
    • 第二点证明:for循环的逻辑就是在i=n并且while成立的时候;将左边的数向右边移动一个位置,n+1显然也成立。
    • 第三点证明:循环最后得到的子数组和原来的数组里面的数字是一样,没有改变,只是顺序是排好的,那么结论成立。
    • 综合上面3点可以根据循环不变式证明插入算法的正确性;
  • 注:插入算法仅仅针对少量的数据效果比较好,如果是大量数据的排序,建议使用其他顺序算法。

相关文章: