简单的查找与排序

1。插入排序
简单的查找与排序
插入排序

如何验证以上代码是正确的 ? ( Loop Invariant 概念和数学归纳法 )

Loop Invariant ( 满足以下 3 个规则 )

  • 第一次执行循环体之前该判断条件为真。
  • 如果第 N – 1 次循环之后 该判断条件为真这个前提成立,那么就有办法证明第 N 次循环之后该判断仍然为真。
  • 如果在所有循环结束后该判断条件为真,那么就有办法证明该算法正确的解决了问题。

例如以上的插入排序

  • 第一次执行之前,数组中只有1个元素,那么这个元素肯定是排序好的
  • 如果第 N - 1次都满足条件,则说明前 N - 1个元素都是排序好的,我们只要插入第 N 个元素,该算法会比较 a[N-1],a[N-2],…… 直到找到合适的位置插入,这样的插入,插入完后也是排序OK的,就类似插扑克牌是一样的道理。
  • 当结束循环时,j = LEN,如果子序列 a[0…j-1]是排序好的,说明 a[0,,,LEN-1]是排序好的,因为数组下标从0开始,所以,也就是说整个数组 a 的 LEN个元素都是排序好的。

这样就满足了以上的 Loop Invariant 。

归并排序

算法描述:先把序列分成 n/2 的两个子序列,再分别对子序列使用归并排序,最后合并成一个最终的排序序列。在描述的步骤过程中,可以很明显的感觉到是一个递归的过程。

简单的查找与排序
归并排序
线性查找
简单的查找与排序
线性查找
折半查找
简单的查找与排序
折半查找




你可能感兴趣的:(排序)