zoukankan      html  css  js  c++  java
  • 简单的查找与排序

    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 的两个子序列,再分别对子序列使用归并排序,最后合并成一个最终的排序序列。在描述的步骤过程中,可以很明显的感觉到是一个递归的过程。

    归并排序
    线性查找
    线性查找
    折半查找
    折半查找




  • 相关阅读:
    texarea动态改变监听
    输入配置
    linux 上安装redis 解压之后使用make命令报错
    sql语句能查询出 放在web程序查询不出
    Eclipse 使用git pull 代码时发生冲突的解决办法
    eclipse git 解决冲突
    微信小程序获取openid
    mybatis 一对多 一对一 xml配置
    Eclipse 中撤消git push提交
    idea 开发中遇到的问题
  • 原文地址:https://www.cnblogs.com/moveofgod/p/2708696.html
Copyright © 2011-2022 走看看