二分:最小值最大和最大值最小
浮点二分的范围不同于整数二分是一个有序的数组,而是一个实数的范围。
再退出循环的时候设置一个极小量如(1e6)
这样表示无限趋近
#include<bits/stdc++.h>
using namespace std;
int main()
{
int data[200];
for(int i=0;i<200;i++)
{
data[i]=4*i+6;
}
int x;cin>>x;
int l=-1,r=199; //最后返回r的值,保证r的范围也就是l+1在0-199之内;需要将l的值设置为-1;
while(l+1!=r) //结束的条件是r和l相邻
{
int mid =(l+r)/2; //需要在内部更新mid
if(data[mid]>=x)
{
r=mid;
}else{
l=mid;
}
} //代码逻辑:最后data[mid]==x;
//然后循环缩小区间直至退出返回r;
cout<<r<<'\n'; //右边的r对应>=x; 左边的l对应<=x; 虽然在退出循环的时候值是相同的,但是含义不一样
return 0 ;
}
//即使找到了目标元素,循环也可能会继续执行几次迭代,直到搜索范围缩小到只包含一个元素为止。
// "位运算" >>1 和/2是一样的。