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 - mod C 的问题

javascript - 在 2 种口味列表中进行二分搜索

java - 在 Java 中,如何确定多个值之一是否位于数组中?

c++ - 二进制搜索算法 C++

java - 利用 BinarySearch 进行自动完成练习

java - 二分查找给出错误类型 "Collections is not applicable for the arguments"

c - 函数指针 - 变量未初始化

c - Asterisk :双重释放或损坏(fasttop)

c - 服务器无法通过C中的Socket向客户端发送消息

c++ - 改变静态数组的大小