算法题16 二分查找及相关题目
二分查找思想就是取中间的数缩小查找范围,对应不同的题目变形,在取到中间数mid确定下一个查找范围时也有不同,左边界有的low=mid+1,也可能low=mid,右边界有的high=mid-1,也有可能high=mid。 对于一个排序数组来说二分查找的时间复杂度是O(logn) 1. 二分查找法 1 int BinarySearch(int arr[],int len,int target) 2 { 3 if (arr==NULL||len<=0) 4 throw std::exception("Invalid input."); 5 int low=0,high=len-1; 6 while(low < high) 7 { 8 int mid = low+(high-low)/2; 9 if (arr[mid]>target) 10 high = mid-1; 11 else if (arr[mid]<target) 12 low = mid + 1; 13 else //find the target 14 return mid; 15 } 16 //the array does not contain the target 17 return -1; 18 } 2.二分查找之寻找边界 这种边界的寻找分为2种:最后1个小于某数的值,低边界;第1个大于某数的值,高边界