我创建了一个包含 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/