知识点-二分查找

int my_binary_serach(int * a, int len, int target) 1 中位数有两个 上位中位数:median=len/2 下位中位数:median=len/2 - 1 常用下位中位数,写法如下:median=(len-1) /2 2 计算median要防止溢出 median = low + (high - low) >> 1; 当low +1 == high的时候,下一个会比较a[low] 3 循环终止的条件是low > high low与high中间的数据是目标区间,当目标区间缩小为0的时候,就终止 a[mid]target, high = mid - 1 a[mid] == target, return mid; 如果数组中没有重复数字: 只有在a[mid]target的时候,high才会移动到mid-1的位置,所以high保存的是a数组中第一个小于target元素的位置

4 当数组中有重复数据的时候,想要输出第一个大于等于target元素的位置

a[mid]=target, high = mid - 1 low保存的还是第一个大于等于target的元素的位置 high保存的是第一个小于target元素的位置 如果修改a[mid]<=target,low = mid+1,那么low中存储的就是第一个大于target的元素的位置代码如下:

int my_binary_serach(int * a, int len, int target) { int low=0, high=0; high = len - 1; int mid; while (low <= high) {mid = low + ( (high - low) >> 1 ); if (a[mid] < target) { low = mid + 1; } else if (a[mid] >= target) { high = mid - 1; } } if (a[low] != target) { cout << "没有找到"<




【知识点-二分查找】

    推荐阅读