比较key与数组中间的值的大小,如果key大于中间值则在右半边继续以相同的方式查找,小于则在左半边继续查找。
int binary_search(vector<int>&arr,int key)
{
int n = arr.size();
int low = 0;
int high = n-1;
int mid = 0;
while(low<high)
{
mid =floor((high+low)/2);
if(key == arr[mid])
{
return mid;
}
else if(key >arr[mid])
{
low = mid +1;
}
else if(key <arr[mid])
{
high = mid -1;
}
}
return -1;
}
递归写法:
int binarySearch2(vector<int>&arr,int low,int high,int key)
{
if(low>high){return -1;}
int mid=floor((low+high)/2);
if(key==arr[mid]){
return mid;
}else if(key<arr[mid]){
high=mid-1;
return binarySearch2(arr,low,high,key);
}else{
low=mid+1;
return binarySearch2(arr,low,high,key);
}
}