二分搜索需要注意开闭区间的问题,限制条件和边界要保持配对:low<=high , low = mid +1 ,high = mid-1。
二分搜索的模板如下:
二分搜索的模板如下:
// 二分搜索
int BinarySearch(int *num, int key, int low, int high)
{
int mid ;
while(low <= high) //切记:条件是 <= ,很多次都不小心写成了 < ,导致了N多WA
{
mid = (low + high)>>1;
if(num[mid] == key)
return mid;
else if(num[mid] < key)
low = mid + 1;
else
high = mid -1;
}
return low; //查找不成功时,返回应该插入的位置,或者直接返回-1,表示查找失败也是可以的
}
二分搜索的扩展:对已排好序的数组A,一般来说可用二分查找 可以很快找到。现有一特殊数组A[],它是循环递增的,如A[]={ 17 19 20 25 1 4 7 9}