int BinarySearch(int *arr, int len, int target) {
int low = 0;
int high = len-1;
int mid = 0;
while (low <= high) {
mid = (low + high) / 2;
if (target < arr[mid]) high = mid - 1;
else if (target > arr[mid]) low = mid + 1;
else return mid;
}
return -1;
}
细节
1、while 循环条件是 low <= high,不是 low < high
2、low和high取值
查找的区间是 [low, high] 这种左闭右闭的区间,当发现下标为 mid 的数组元素不等于 target,那肯定下一步查找的是 [left, mid-1] 或者 [mid+1, right] 区间,因为刚刚下标为 mid 的元素已经比对过了,不需要再比对。
3、mid取值
可以取mid = (low+high)/2
也可以取mid = low + (high - low) / 2