c++二分查找拓展,
#include <iostream>
using namespace std;
/**
题目说明:一组有序的数字,查找数组中某一个数据的位置,
如果当前数据有多个,查找到第一个数据的位置
*/
const int N = 7;
int arr[N] = {1,2,2,2,3,3,4};
int theSecondSearch(int a[],int n,int key)
{
int l,r,mid;
l=0,r=n-1;
while(true)
{
if(r==l && a[l]==key) ///找到结束的标志 出口 1
return l;
if(r<l) ///找不到结束的标志 出口 2
return -1;
mid= (l+r)/2; ///mid指针,指向中间的数据
if(key < a[mid]) //判断 key 在左侧
{
r=mid-1;
continue;
}
if(key > a[mid]) //判断 key 在右侧
{
l=mid+1;
continue;
}
if(key==a[mid]) //找到相等的位置,做接下来的处理,继续二分查找
r=mid;
}
return l;
}
int main()
{
cout << “Hello world!” << endl;
cout<<theSecondSearch(arr,N,8)<<endl;
return 0;
}