问题:
对于事先排好序的非递减数列,查找其中值为val的下标,如果val不存在则返回-1
二分查找,数学中有利用二分法求近似值的方法也是这个原理
数列是非递减的,只需步步尝试逼近所需要的值
#include<bits/stdc++.h>
using namespace std;
int BinarySearch(const int A[],int val,int N)
{
int left,right,mid;
left = 0,right = N-1;
while (left <= right)
{
mid = (left+right)>>1;
if (A[mid] < val)
left = mid + 1;
else if (A[mid] > val)
right = mid - 1;
else return mid;
}
return -1;
}
int main()
{
int A[8] = {-5,2,4,7,9,22,122,250};
cout<<BinarySearch(A,7,8)<<endl;
cout<<BinarySearch(A,27,8)<<endl;
return 0;
}
lower_bound(first,last,val)返回非递减数列中[first,last)