算法竞赛模板 二分查找

①基础二分查找

int BSearch(int R[],int low,int high,int val)
{
    while(low<=high)
    {
        int mid=(low+high)/2;
        if(R[mid]==val) return mid;
        else if(R[mid]>val)
            high=mid-1;
        else low=mid+1;
    }
    return -1;
}

②lower_bound函数与upper_bound函数

(1) 在使用这两个函数前,必须保证该数组是非递减序列。

(2) lower_bound(begin,end,num)

从数组的begin位置到end-1位置二分查找第一个≥num的元素,找到则返回该元素的地址,不存在则返回end。

(3) upper_bound(begin,end,num)

从数组的begin位置到end-1位置二分查找第一个>num的元素,找到则返回该元素的地址,不存在则返回end。

(4) 通过返回的地址减去起始地址begin,我们就可以得到该元素在数组中的下标。

原文地址:https://www.cnblogs.com/kannyi/p/9181740.html