标签:img 重复执行 二分查找 索引 int 避免 这一 变量 上界
二分查找常用与一个有序序列或一个具有单调性问题中。
int binarysearch(int a[],int num,int x){
int left=0,right=num-1;//查找区间[left,right]
while(left<=right){//跳出循环时left=right+1
int mid = left+(right-left)/2;//避免(left+right)溢出
if(a[mid] == x)return mid;
if(a[mid] < x)
left = mid + 1;
else
right = mid - 1;
}
return -1;//执行到这一步说明个序列中不存在x
}
int binarysearch(int a[],int num,int x){//查找数组a,[0,num-1]中比x小的个数
int left=0,right=num;//查找区间[left,right)
while(left<right){//跳出循环时left=right
int mid = left+(right-left)/2;//避免(left+right)溢出
if(a[mid] >= x) //求左边界我们尽量遇到==x的时候右边界往左移
right = mid;//注意是左闭右开区间右区间缩小不需要减一
else
left = mid + 1;//新的区间不包含a[mid]
}
return left;//跳出循环时left指向第一个x的位置
}
int binarysearch(int a[],int l,int r,int x){//查找数组a,[l,r]中元素x的位置
int left=0,right=num;//查找区间[left,right)
while(left<right){//跳出循环时left=right
int mid = left+(right-left)/2;//避免(left+right)溢出
if(a[mid] <= x) //求右边界我们尽量遇到==x的时候左边界往右移
left = mid+1;//注意是左闭右开区间
else
right = mid;//新的区间不包含a[mid]
}
return left-1;//注意left要减一,跳出循环时left指向最右x的下一个位置
}
标签:img 重复执行 二分查找 索引 int 避免 这一 变量 上界
原文地址:https://www.cnblogs.com/hbhszxyb/p/12232132.html