彻底弄懂二分法

二分法通过每次从中间查找并排除一半的可能性,显著减少了在有序列表中搜索目标值的时间复杂度。本文深入探讨了如何确定中间值,以及在目标值大于或小于中间值时如何调整搜索范围。通过设置low、mid和high变量,结合条件判断更新范围,并使用公式(high + low) / 2找到新的中间值,最终实现高效查找。示例展示了如何在1到100的列表中用七步找到目标数字。
摘要由CSDN通过智能技术生成

在一个1到100的列表中,如何最快找到目标数字,如果按照普通方法遍历,将所有数字都拿出来一一对比,那么最多需要100步。

而二分法每次都会从中间找起,每次都可以排除一半的数字,这样一来会大大减少对比次数,在100以内找到目标数只需要七步。

所以,二分法的关键在于如何找出中间数,100的中间数当然很好找,直接除2就行,但是如果目标数大于50,那么如何在50到100之间找出中间数?

首先我们要设置三个变量来表示1-100的答案范围,分别为:

//list为从1到100的列表
var mid = list.length/2
var low = 1
var high = 100

如果目标数大于50,那么应该将答案范围收缩至50-100,这时候就会发现,如果目标数大于中间数(answer > mid),就只有low的值改变。
那么反过来说,如果目标数小于中间数(answer < mid),那就只有high的值改变,因此判断代码应该是这样:

if(answer > mid){
   
	low = mid
	...
} else if(answer 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值