【厨子哥】二分查找详解

什么是二分?

废话不多说,让导演帮我们把镜头切到袁记菜馆吧!

袁记菜馆内。。。。

店小二:掌柜的,您进货回来了呀,哟!今天您买这鱼挺大呀!

袁厨:那是,这是我今天从咱们江边买的,之前一直去菜市场买,那里的老贵了,你猜猜我今天买的多少钱一条。

店小二:之前的鱼,30个铜板一条,今天的我猜26个铜板。

袁厨:贵了。

店小二:还贵呀!那我猜20个铜板!

袁厨:还是贵了。

店小二:15个铜板。

袁厨:便宜了

店小二:18个铜板

袁厨:恭喜你猜对了

上面的例子就用到了我们的二分查找思想,如果你玩过类似的游戏,那二分查找理解起来肯定很轻松啦,下面我们一起征服二分查找吧!

完全有序

二分查找

二分查找也称折半查找(Binary Search),是一种在有序数组中查找某一特定元素的搜索算法。我们可以从定义可知,运用二分搜索的前提是数组必须是有序的,这里需要注意的是,我们的输入不一定是数组,也可以是数组中某一区间的起始位置和终止位置

通过上面二分查找的定义,我们知道了二分查找算法的作用及要求,那么该算法的具体执行过程是怎样的呢?

下面我们通过一个例子来帮助我们理解。我们需要在 nums 数组中,查询元素 8 的索引

int[ ]  nums = {
   1,3,4,5,6,8,12,14,16}; target = 8  

(1)我们需要定义两个指针分别指向数组的头部及尾部,这是我们在整个数组中查询的情况,当我们在数组

某一区间进行查询时,可以输入数组,起始位置,终止位置进行查询。

二分查找1

(2)找出mid,该索引为 mid =(left + right)/ 2,但是这样写有可能溢出,所以我们需要改进一下写成

mid = left +(right - left)/ 2 或者 left + ((right - left ) >> 1) 两者作用是一样的,都是为了找到两

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值