2015-10-13 59 views
-1

我有我的二进制搜索功能的问题。基本上只是想检查向量中是否有零。但它不会返回正确的结果。这里是代码。任何人都可以弄清楚我做错了什么?二进制搜索不能使用向量工作

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则它应该返回真实的,但返回0
输入:1 0应返回true,而返回false。

+2

当它不起作用时,请至少张贴实际的测试用例。 – Petr

+1

为什么有人会像这样复杂的二进制搜索算法..你有没有毫无意义地复杂你的算法..现在你很困惑..更好地抓住一本教科书并阅读二进制搜索 – gjha

+0

Aside:所有与'odd_even'的东西doesn'不要做任何事情;两种情况都会导致'(右 - 左)/ 2'。 – Hurkyl

回答

6

您的mid_number是错误的。

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