【折半查找算法、二分查找法.】

如果让你在一个有序数组中查找具体的某个数字 n,你会怎么做 这时候我们可能会以简单的代码来实现它:如下图


       假设这个有序数列是1-10这十个数字,让我们找到某一个数 n,上图这个代码是可以做到的,但是这段代码也有许多的不足之地,上图的代码中循环体如果要找到对应的数字7,就需要对这个进行7次判断,最终找到这个数,如果说这个数组里面有100位数字的话,要是想找到 70这个数字,循环要进行70次的判断才能确定这个数字的位置,这段代码就显得没有那么精炼,也会影响运行的速度,下图介绍一种算法叫折半查找算法、二分查找法:这种算法对于这类有序数组查找某一位数 n,对比上图就显得非常的快捷、方便,而图2中的代码为折半查找法,如名字一般先对这个数组的左下标与右下标的和除以2来找到这组数列的中间值,判断出要查找的数字n是在这组数组的左下标到中间值的部分还是右下标到中间值的部分,以这个为规律进行循环,执行一次就可以消除一半的不符合数字,第一次执行mid等于4,下标为4的数字为中间值 也就是5,进入判断是否比我们要找的数字大或者小,第一次执行中间值为5,5比要找的数字7要小,符合if语句第一个,执行mid-1,证明下标0-4之间的数比我们要找的数小可以排除了,以此类推,就可以找到我们要找的数字.


总结:

       如图1所示,假设我们要找的数n为7,那图1的代码要执行到第七次才可以找到这个数,如图2代码来看,第一次执行的时候排除了一半,变为下标5-下标9之间,第2次执行查找范围变成下标6-9之间,第三次执行完查找范围变为下标6-7之间,第四次左右下标均为6,执行完后下标为6,符合代码中第二个else内容,所以,从上述两种方法对比,图1需要至少7次才能完成,而图2则为四次,相比较于求更大的数组而言,折半查找法是更好的选择,更精炼,更快捷.


我本身也是初学者,也在慢慢摸索才懂得如何让代码更加的精炼、快捷,也有许多的不足之地,希望大家不要介意 也希望能多多学习、多多尝试,以更好的办法来解决问题,慢慢提高自己的代码水平!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JuLiJuLi.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值