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
该代码展示了一个C++实现的二分查找函数intBinarySearch(),它在有序整数数组中寻找目标值target。while循环的条件是low≤high,保证了查找区间[low,high]。函数通过比较target与mid位置的元素调整搜索范围,最终返回目标值的索引或-1表示未找到。
1980

被折叠的 条评论
为什么被折叠?



