1. 程式人生 > >徒手實現lower_bound和upper_bound

徒手實現lower_bound和upper_bound

ref obj AR bsp cnblogs www. else 實現 判斷

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; } }

徒手實現lower_bound和upper_bound