二分查找函数
二分查找函数Binary Search
*写一个函数,在包含size个元素的,从小到大排序的int 数组a中查找元素p,如果找到,则返回元素下标,如果找不到,则返回-1,要求复杂度O(log(n))
int Binary Search(int a[],int size,int p){
int left = 0;//查找区间左端点
int right = size -1;//查找区间右端点
while(left<=right){
int mid = left + (right-left)/2;//求区间中值下标,不写成(R+L)/2防止两int相加过大溢出
if(p == a[mid])
return mid;
else if(p > a[mid])
left = mid + 1;
else
right = mid - 1;
}
return -1;
}//复杂度O(log(n))
二分查找函数Lower Bound
*写一个函数,在包含size 个元素,从小到大排序的int数组 a 中查找比给定整数 p 小的,下标最大的元素,找到则返回其下标,找不到则返回-1
int Lower Bound(){
int left = 0;
int right = size - 1;
int lastpos = -1;//用lastpos表示目前为止找到的最优解
while(left<=right){
int mid = L+(R-L)/2;
if(p<=a[mid])
R = mid - 1;
else
lastpos = mid;
L = mid + 1;
}
return lastpos;
}
**注意事项:1.二分查找的数组必须是有序数组 2.求区间中值下标mid,不写成(R+L)/2防止两int相加过大溢出