二分查找

//循環實現
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]的情況,這時只能用順序查找。所以,這題看上去簡單,其實處理起來還挺麻煩~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章