二分查找的原理:
那现在我们通过一道题讲解二分查找算法的实现:
代码如下:
#include <iostream>
using namespace std;
int n, q;
const int N = 100000;
int arr[N];
int main()
{
scanf("%d %d", &n,&q);
for(int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
while (q--)
{
int k;
scanf("%d", &k);
int L = 0, R = n - 1, mid = 0;
while(L < R)
{
mid = (L + R) >> 1;
if(arr[mid] >= k) R = mid;
else L = mid + 1;
}
if(arr[L] != k) cout<<"-1 -1"<<end;
else
{
cout<<L<<" ";
L = 0, R = n - 1;
while (L < R)
{
mid = (L + R + 1) >> 1;
if(arr[mid] <= k) L = mid;
else R = mid - 1;
}
cout<<L<<endl;
}
}
return 0;
}
分析: