二进制搜索以查找小于或等于另一个元素的最大元素

时间:2020-04-18 18:07:26

标签: c++ binary-search

我正在努力寻找一个二进制搜索函数,该函数在向量中给定一个元素,搜索最接近该元素但仍小于或等于该元素的元素。但是我的代码导致垃圾编号。这是我的代码:

int close(vector<int> r, vector<int> g, int pos){
    int lastpos = 0;
    int mid = int((r.size())/2);
    while(mid>=1){
        if(r[lastpos+mid]>g[pos]){}
        else{
            lastpos += mid;
            if(r[lastpos+1]>g[pos] || r[lastpos]==r[r.size()-1]){
                return r[lastpos];
            }
        }
        mid/=2;
    }
    return r[0];
}

例如,如果我用(r,g,1)调用该函数,并且假设g [1] = 3并且向量r包含{1、3、4},则此函数会将中值设置为3 / 2,但将其四舍五入为整数,所以取一。最后一个位置(lastpos)默认设置为0。现在,我的函数将检查r [lastpos + mid]> g [pos]还是3>3。这不是因为它们相等。现在我的函数将继续执行else条件,并在lastpos中添加mid。现在lastpos =1。现在,它将检查r [lastpos + 1]> g [pos]是否为最接近且小于或等于g [1]的最小值。由于下一个元素是4,且4大于3,它将返回3。

但是,如果lastpos是end元素,那么它将简单地返回end元素,因为没有更多要检查的数字了。

例外:如果向量r中没有小于或等于向量g中的元素,则它将返回向量r中的第一个元素。

注意:这些向量已排序

0 个答案:

没有答案