c - 二进制搜索找不到正确的值

标签 c binary-search

我创建了一个包含 1000 个元素的 vector ,元素的值就是索引本身 V[100] = 100, V[50] = 50 等

当我按值调用二分查找时,它必须返回索引给我,它本身是什么 所以 binary_search(vector, begin, end, 50) 必须返回给我 50,但返回 30。我尝试使用 gdb 进行调试,但找不到任何错误。

代码:

int rbb(int *v, int left, int right, int val) 
{

    int mid = (left + right) / 2;  //middle element

    if (right < left) //stop codition, pointers shifted
        return -1;

    if (val == v[mid]) //found value
        return mid;  

    if (val > v[mid]) //value is on vector right portion
        rbb(v, mid+1, right, val);

    if (val < v[mid]) //value is on vector left portion
        rbb(v, left, mid-1, val);

}

int main () 
{

    int v[1000];

    for (int i = 0; i < 1000; i++)
        v[i] = i;

    int x = rbb(v, 0, 999, 300);
    printf("%d", x);
}

最佳答案

您的代码的问题是您没有从递归调用 if rbb 函数返回值。你应该修改你的代码

if (val > v[mid]) //value is on vector right portion
    return rbb(v, mid+1, right, val);

if (val < v[mid]) //value is on vector left portion
    return rbb(v, left, mid-1, val);

关于c - 二进制搜索找不到正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58668146/

相关文章:

c++ - 字符串 "sizeof"的意外结果

c - 解析树程序错误

c - GCC Profiler,时间不详

c++ - CUDA GPU 上的小型二进制搜索

java - 在Java中二进制搜索字符串

c - 确定 C 中 stdin 大小的正确/有效方法

python - c 程序 SWIG 到 python 给出 'ImportError: dynamic module does not define init function'

java - java contains() 方法使用什么算法?

performance - 如何提高电子商务网站的搜索性能?

algorithm - 以最佳方式在二叉搜索树中找到第 k 个最小元素