2015-10-13 25 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