• 排序系列三: 二分查找法


          Hello,大家好,今天给大家继续讲解排序系列。可能有细心的"鸟友"会问,你不是讲解排序吗?怎么今天的主题是一个查找方法咧?

          不错,因为考虑到在实际项目中,排序和查找经常是两个好基友,二者息息相关,相互依存。故为了大家更好的接手老板交给你的实际工作,而不至于被说成是"新兵蛋子",我觉得大家有必要和我来学学这个查找法。

           言归正传,首先假定一个有序整数序列存储在数组list[MAX]中,即list[0]<list[1]l<...<list[MAX-1];我们要查找的数为num_search令 1eft、 right分 别 表 示 表 中 待查序列的左右端 点 ,初 值 分别为:left=0,right=MAX-1。再令 middle=(left+right)/2,为序列表 的 中间值 。 num_search和 list[middle]比较的 结果 ,有三种可能 :

    (1)num_search<list[middle].此 时 ,如 果 num_search在 表 中 ,它一定 在 位 置0与midde-1之间 ,因此 ,把 right设成 middle-1.

    (2) num_search==list[middle]。 此 时 , middle所指位置就是要找的数,函数返 回midd1e。

    ⑶ num_search>list[middle]。 此 时 ,如 果 searchnum在 表 中 ,它一定 在 位 置midde+1与MAX-1之间 ,因此 ,把 left设 成 middle+1.

    为了程序的简洁和兼容性,这种比较可以定义一个比较宏COMPARE(x,y)来实现.

    当 num_search还没被找到,同时尚有没检查到的其它整数,则我们重新计算 middle,重 复上述查找过程。

    ‌       接下来的程序是具体实现这种查找策略。程序实现了由用户自行设置序列个数LEN,然后由随机数生成函数生成各元素,采用上节课讲的选择排序算法将序列转换成由小至大排列的有序序列。

           最后就是今天的算法关键啦☞《二分查找法》

           包括两个子任务:

    (1)表中是否还有未查找过的整数

    (2)比较 num_search和 list[middle]。

    (3)递归调用

          无图无真相!

    6217760-7541cad8faadf9bd.jpg
    图片发自简书App
    6217760-53103339552a227f.jpg
    图片发自简书App

    6217760-8318161ade316dd1.jpg
    图片发自简书App
  • 相关阅读:
    重新理解:ASP.NET 异步编程
    EF DbContext.Configuration.ProxyCreationEnabled 什么鬼?
    爱的预感
    ASP.NET MVC Ajax.ActionLink 简单用法
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(1)
    EntityFramework 外键值映射
    ASP.NET Web API 异常日志记录
    ASP.NET MVC Application_Error 无效不执行
    JavaScript sync and async(同步和异步)
    软件的模块化开发
  • 原文地址:https://www.cnblogs.com/leon1124/p/14039893.html
Copyright © 2020-2023  润新知