int search(int l,int r,int key) {
int mid = l + r >> 1;
while(a[mid] != key) {
if(a[mid] > key) {
r = mid - 1;
}
else {
l = mid + 1;
}
if(l > r) return -1; //没找到
mid = l + r >> 1;
}
return mid;
}
二、通用实现
int search(int k) {
int l = -1,r = n;//注意的是数组是从0开始的
while(l + 1 < r) {
int mid = l + r >> 1;
if(a[mid] <= k)
l = mid;
else
r = mid;
}
return r;//返回的是大于k的第一个位置
}
二分算法是什么二分搜索是一种时间复杂为l o g 2 n 的算法,可以用于单调函数求根和单调序列查询的有效算法,即使在数列长度在很大的情况下也能很快对其查询,在此同时二分算法也是一种思维方式,在很多解题过程中可以更好的优化代码等等二分算法的原理每次拿目标数值(以下用key表示)与数组中间位置的数据(以下用a[mid]表示,mid表示数组中间位置索引值)进行比较,如果key大于a[mid],继续将key与大于a[mid]部分的中间位置的值进行比较;如果key小于a[mid],继续将key与小于a[mi