-
插入排序
- 原理:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序。
- 代码实例:

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