美文网首页
上界&下界&精确查找

上界&下界&精确查找

作者: Gitfan | 来源:发表于2017-03-23 01:05 被阅读0次
    //在arr中区间[lef,rig)寻找第一个>=val的元素的位置
    //若没有元素>=val,则返回rig
    int lowerBound(int *arr,int lef,int rig,int val)
    {
        int mid;
        while(lef<rig)
        {
            mid=lef+((rig-lef)>>1);
            if(arr[mid]>=val)
            {
                rig=mid;
            }
            else lef=mid+1;
        }
        return lef;
    }
    //在arr中区间[lef,rig)寻找第一个>val的元素的位置
    //若没有元素>val,则返回rig
    int upperBound(int *arr,int lef,int rig,int val)
    {
        int mid;
        while(lef<rig)
        {
            mid=lef+((rig-lef)>>1);
            if(arr[mid]<=val)
            {
                lef=mid+1;
            }
            else rig=mid;
        }
        return lef;
    }
    //在arr中区间[ lef,rig ]寻找等于key的元素
    //不存在,则返回-1
    int binarySearch(int *arr,int lef,int rig,int key)
    {
        int mid;
        while(lef<=rig)
        {
            mid=lef+(rig-lef)/2;
            if(arr[mid]==key) return mid;
            if(arr[mid]>key) rig=mid-1;
            else lef=mid+1;
        }
        return -1;
    }
    

    相关文章

      网友评论

          本文标题:上界&下界&精确查找

          本文链接:https://www.haomeiwen.com/subject/tjaanttx.html