下面三种采用了左右都闭合的数组的形式
void binaryS(int a[],int l,int r,int x) //经典做法,适合寻找数组中需要找的值的所在位置
{
while(l<=r) //等l大于r的时候可以判断这个数组是找不到x的情况
{
int mid = (l+r)/2;
if(a[mid] == x)
return mid;
else if(sum < m)
l = mid + 1;
else if(sum > m)
r = mid - 1;
}
return -1; //查找失败
}
int upper_bound(int left,int right,int x) //寻找第一个大于寻找值的位置
{
int l=left,r = right;
while(l<r) //因为不需要找特定的数值,而是第一个大于x的数字,即使x不存在,也只需要找到假设它存在的时候它应该在的位置,即是l==r的时候。
{
int mid = (l+r)/2;
if(dim[mid] <= x)
l = mid + 1;
else if(dim[mid] > x)
r = mid;
}
return l;
}
int lower_bound(int left,int right,int x) //寻找第一个大于等于寻找值的位置
{
int l=left,r = right;
while(l<r)
{
int mid = (l+r)/2;
if(dim[mid] <= x)
l = mid + 1;
else if(dim[mid] > x)
r = mid;
}
return l;
}
左开右闭的情况
int lower_bound(int left,int right,int x) //寻找第一个大于等于寻找值的位置
{
int l=left,r = right;
while(l + 1<r) //当l+1 == r的时候意味着唯一位置
{
int mid = (l+r)/2;
if(dim[mid] <= x)
l = mid;
else if(dim[mid] > x)
r = mid;
}
return l;
}
二分法总结
猜你喜欢
转载自blog.csdn.net/qq_15556537/article/details/104070319
今日推荐
周排行