二分(上界,下界)模板

二分查找:(Binary Search) 只适用有序序列

二分查找 (迭代实现)

int bsearch(int *A,int l,int r,int key)
{
        
        int m;
        while(l<r)
        {
                m = l+(r-l)/2;
                if(key == A[m]) return m;
                else if (key < A[m]) r = m;
                else l = m+1;
        }
        return -1;
}

下界:(lower_bound)当key存在return第一次出现的位置,如果不存在return 一个下标 i(把key插入i位置,序列仍有序).

上界:(up_bound)当key存在return最后一次出现的位置的下一个位置,如果不存在return 一个下标 i(把key插入i位置,序列仍有序).

找下界:

int lower_bound(int *A,int l,int r,int key)
{
        
        int m;
        while(l<r)
        {
                m = l+(r-l)/2;
                if(key <= A[m]) r = m;
                else l = m+1;
        }
        return l;
}
找上界:
int up_bound(int *A,int l,int r,int key)
{
        
        int m;
        while(l<r)
        {
                m = l+(r-l)/2;
                if(key >= A[m]) l = m+1;
                else r = m;
        }
        return l;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页