首页 > 代码库 > 二分查找

二分查找

标准的二分查找:binary_search

int bsearch(int a[],int l,int r,int x){         int m;    while(l<=r){            m = (l+r)/2;  // m = l+(r-l)>>2;        if(a[m]==x)            return m;        else if(a[m]>x)             r = m-1;        else            l = m+1;    }    return -1; //查找不成功}

二分查找求下界(第1次出现的位置) lower_bound

int bsearchLower(int a[],int l,int r,int x){    int m;    while(l<r){        m = (l+r)/2;        if(x<=a[m])              r = m;        else              l = m+1;    }    if(a[l]==x)         return l;    else         return -1;    //查找不成功}

二分查找求上界(最后一次出现的位置)upper_bound

int bsearchUpper(int a[],int l,int r,int x){    int m;    while(l<r){        m = (l+r+1)/2;     //加了“1”        if(x<a[m])              r = m-1;        else               l = m;    }    if(a[r]==x)         return r;    else         return -1;//查找不成功}