二进制搜索不使用向量

时间:2015-10-13 13:30:21

标签: c++ c++11

我的二进制搜索功能有问题。基本上目的只是想检查矢量中是否为零。但它没有返回正确的结果。这是代码。任何人都可以弄清楚我做错了什么吗?

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。

1 个答案:

答案 0 :(得分:6)

您的mid_number错了。

考虑binarySearch(arr, 5, 11)。您将mid_number设置为3.但是3不在[5,11)的范围内。您需要将left添加到mid_number