我的二进制搜索功能有问题。基本上目的只是想检查矢量中是否为零。但它没有返回正确的结果。这是代码。任何人都可以弄清楚我做错了什么吗?
bool RecursiveBinarySearch::binarySearch(std::vector<int> &input, int left, int right)
{
int mid_number;
int odd_even = (right - left)%2;
if(odd_even == 0)
{
mid_number = (right-left)/2;
}
else
{
mid_number = (((right-left)+1)/2)-1;
}
if(right>=left)
{
if(input.at(mid_number)==0)
{
return true; //mid_number
}
else if(input.at(mid_number)>0)
{
return binarySearch(input, left, mid_number-1);
}
else
{
return binarySearch(input, mid_number+1, right);
}
}
else
{
return false; //-1 return
}
}
输入:1 2 3 4 0它应返回true但返回0
input:1 0应返回true,但返回false。
答案 0 :(得分:6)
您的mid_number
错了。
考虑binarySearch(arr, 5, 11)
。您将mid_number
设置为3.但是3不在[5,11)
的范围内。您需要将left
添加到mid_number
。