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 << "没有找到"<
【知识点-二分查找】