排序系列三: 二分查找法

      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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon_George

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值