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

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




  • 相关阅读:
    34.初识搜索引擎及timeout机制
    33.bulk json格式的理解
    32.es读请示内部分发原理
    31.分片和复制带来的副本一致性
    30.es增删改内部分发原理
    29.es路由原理
    27.初识分布式文档存储系统慨念
    26.bulk批量操作
    26.mget批量查询
    25.partial update内置乐观锁并发控制
  • 原文地址:https://www.cnblogs.com/moveofgod/p/2708696.html
Copyright © 2011-2022 走看看