• 简单的查找与排序


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

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




  • 相关阅读:
    with open 向文件的某一固定行,追加内容
    静态语言 与 动态语言 的区别
    ELK
    matplotlib绘图
    django用户认证
    django+uwsgi+nginx 部署生产环境
    图片验证码+session
    ajax
    form
    middleware中间件
  • 原文地址:https://www.cnblogs.com/moveofgod/p/2708696.html
Copyright © 2020-2023  润新知