关于二分查找

1、首先二分查找判断元素是否存在,存在返回其位置,不存在返回-1.代码如下:

int bsearchWithoutRecursion(int array[], int low, int high, int target)
{
    while(low <= high)
    {
        int mid = (low + high)/2;
        if (array[mid] > target)
            high = mid - 1;
        else if (array[mid] < target)
            low = mid + 1;
        else //find the target
            return mid;
    }
    //the array does not contain the target
    return -1;
<pre name="code" class="cpp">

 

2、

1)二分法寻上界:

//Find the fisrt element, whose value is larger than target, in a sorted array 
int BSearchUpperBound(int array[], int low, int high, int target)
{
    //Array is empty or target is larger than any every element in array 
    if(low > high || target >= array[high]) return -1;
   
    int mid = (low + high) / 2;
    while (high > low)
    {
        if (array[mid] > target)
            high = mid;
        else
            low = mid + 1;
       
        mid = (low + high) / 2;
    }

    return mid;
}
2)二分法寻下界:

//Find the last element, whose value is less than target, in a sorted array 
int BSearchLowerBound(int array[], int low, int high, int target)
{
    //Array is empty or target is less than any every element in array
    if(high < low  || target <= array[low]) return -1;
   
    int mid = (low + high + 1) / 2; //make mid lean to large side
    while (low < high)
    {
        if (array[mid] < target)
            low = mid;
        else
            high = mid - 1;
       
        mid = (low + high + 1) / 2;
    }

    return mid;
}

2、若要寻找严格的上下界,则把上面的大小判断修改即可:换成大于等于和小于等于。

去掉判断数组边界的等号:

target >= array[high]改为 target > array[high]

在与中间值的比较中加上等号:

array[mid] > target改为array[mid] >= target


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值