2021-4-15 二分搜素基础模型

这篇博客详细介绍了如何使用二分查找算法在升序数组中找到大于给定值x的最小值和小于x的最大值。通过演示C++代码,解释了右移运算在除以2时向下取整的优势,特别是在处理负数时,避免了整数除法可能产生的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
using namespace std;

int main()
{
	//升序a数组中找到大于x的最小值;
	int a[5] = { 0,1,2,3,4 };
	int x;
	cin >> x;
	int l = 0, r = 4;
	while (r > l)
	{
		int mid = (l + r) >> 1;//如果出现mid = (l + r )>>1 = l 的情况还是会继续循环
		if (a[mid] >= x)
			r = mid;
		else
			l = mid + 1;
	}

	//升序a数组中找到小于x的最大值
	while (r > l)
	{
		int mid = (l + r + 1) >> 1;//如果不+1的话会有mid = (l + r )>>1 = l 的情况而进入l= mid则无限循环若进入r=mid-1则r<l循环不能以l == r结束
		if (a[mid] <= x)
			l = mid;
		else
			r = mid - 1;
	}
}
/*右移运算是向下取证,整数除以2是向0取整,在二分值域包含负数时后者不能正常工作*/

右移运算是向下取证,整数除以2是向0取整,在二分值域包含负数时后者不能正常工作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值