二分查找函数binarysearch:
注意不是mid=(left+right)/2,因为left+right可能溢出整数范围
int binarysearch(int a[],int size ,int p){//找p,返回位置
int left=0,right=size-1;
while(left<=right){//查找趋紧不为空
int mid=left+(right-left)/2;//如果是偶数个元素,去中间偏左的那个
if(p==a[mid])
return mid;
else if(p>a[mid])
left=mid+1;
else
right=mid-1;
}
return -1;
}
lowerbound函数:在包含size个元素的、从小到大排序的int 数组a里查找比给定整数p小的,下标最大的元素。找到则返回其下标,找不到返回-1。
int lowerbound(int a[],int size,int p){
int left=0,right=size-1;
int lastpos=-1;//到目前为止找到的最优解
while(left<=right){
int mid=left+(right-left)/2;
if(a[mid]>=p)
right=mid-1;
else{
lastpos=mid;
left=mid+1;
}
}
return lastpos;
}