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

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




  • 相关阅读:
    几句让自己保留的动力的格言
    repo 的几个使用理解
    (转)汇编中断大全
    (转) 汇编.section和.text解释
    find 命令一些小技巧;
    android 系统使用c语言获取系统属性
    新的起点
    PDBC详细介绍
    PDBC(连接数据库)
    Python——基础知识
  • 原文地址:https://www.cnblogs.com/moveofgod/p/2708696.html
Copyright © 2011-2022 走看看