1. 程式人生 > >二分查詢-陣列實現(小trick)

二分查詢-陣列實現(小trick)

template<typename T>
int binarySearch(T arr[], int n, T target){
    int l = 0, r = n-1;          //在[l...r]範圍內尋找target
while(l <= r){              //當 l == r 時 區間有效
int mid = l+(r-l)/2; if(arr[mid] == target) return mid; if(target > arr[mid]) l = mid + 1;          //target在[mid+1, r]中
else                 //target<arr[mid]
r = mid - 1;          //target在[l...mid]中 }

此處的需要注意的點是:

為什麼不用 int mid = (l+r)/2

因為mid,l,r 都是整型,所以如果l,r過大,相加後容易整型溢位,所以使用

int mid = l+(r-l)/2

先相減再加的方法。