//循環實現
int BinarySearch(int* arr,int low,int high,int target){
int mid;
while(low<=high){
mid=(low+high)/2;
if(arr[mid]>target)
high=mid-1;
else if(arr[mid]<target)
low=mid+1;
else
return mid;
}
return -1;
}
//遞歸實現
int BinarySearch(int* arr,int low,int high,int target){
if(low>high)
return -1;
int mid=(low+high)/2;
if(arr[mid]>target)
BinarySearch(arr,low,mid-1,target);
else if(arr[mid<target])
BinarySearch(arr,mid+1,high,target);
else
return mid;
}
用途:如採面試題是妥求在排序的數組(或者部分排序的數紐)中查找一個數字或者統計某個數字出現的次數,我們都可以嘗試用二分查找算法.
如《劍指offer》裏面試題8,旋轉數組的最小值。首先要想到二分查找;其次要考慮沒有旋轉的情況;最後,還要考慮arr[index1]==arr[index2]==arr[indexMid]的情況,這時只能用順序查找。所以,這題看上去簡單,其實處理起來還挺麻煩~