首先给出一般的二分搜索代码
int binary_serach(vector<int> arr, int data){
int min = 0;
int max = arr.size() - 1;
int mid;
while(min <= max){
mid = (min + max)/2; //这句话需要改进
if(arr[mid] > data){
max = mid - 1;
}
else if(arr[mid] < data){
min = mid + 1;
}
else{
return mid;
}
}
return -1;
}
主要的bug在mid = (min + max)/2上面,当数组的下表过大时,二者相加有时候会出现内存溢出的问题.
即: (min + max) > INT_MAX
修改:
mid = min + (max - min) / 2;
更高逼格的修改,使用位运算
mid = min + ((max - min) >> 1);