徒手实现lower_bound和upper_bound

STL中lower_bound和upper_bound的使用方法:STL 二分查找

lower_bound:

    int obj=3;
    int l=0;    //初始化 l ,为第一个合法地址
    int r=10;    //初始化 r , 地址的结束地址
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(arr[mid]<obj){
            l=mid+1;
        }else{
            r=mid;
        }
    }

upper_bound:

    int obj=3;
    int l=0;    //初始化 l ,为第一个合法地址
    int r=10;    //初始化 r , 地址的结束地址
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(arr[mid]<=obj){
            l=mid+1;
        }else{
            r=mid;
        }
    }

(将上文的lower_bound的 < 替换为 <= 即可)

为便于记忆可以修改判断条件。

lower_bound:

    int l=0;    //初始化 l ,为第一个合法地址
    int r=10;    //初始化 r , 地址的结束地址
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(arr[mid]>=obj){
            r=mid;
        }else{
            l=mid+1;
        }
    }

upper_bound:

    int l=0;    //初始化 l ,为第一个合法地址
    int r=10;    //初始化 r , 地址的结束地址
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(arr[mid]>obj){
            r=mid;
        }else{
            l=mid+1;
        }
    }
原文地址:https://www.cnblogs.com/TQCAI/p/8573791.html