c++中的算法 折半查找法(二分法)

 我来答
舒适还明净的海鸥i
2022-07-15 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:70.1万
展开全部

假设有n个数已按照 升序(这是关键!) 放在一维数组a中,如何找到你想要的数呢?

二分法,顾名思义,把一段数字分成两半。
你要的数在 已经按照升序排好了 并且的情况下与中间数进行对比有4种情况:

为什么在发现数x比中间数大/小之后,设定left=mid+1和right=mid-1?而不能是left=mid和right=mid?

这就牵扯到如果中间数有两个(如示意图中的第一次循环的中间数为21、25),那么系统会自动选 左边 的那个数作为中间数(21)。
那么当需要检索的是 最末尾的数 ,而最后就剩两个边界,那么无论怎么取中间数,左右边界的范围都不会改变,左边界还是左边界。而你需要检索的数是右边界,即使数确实比中间数大,但是因为算法,中间数永远都不会是右边界,所以永远都不会找到右边界的数。

但是如果设定为left=mid+1和right=mid-1,这种情况就能够使左边界=右边界,中间数就等于那个数,从而能够进行比较、找到。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式