2013-07-03 29 views
0

我幾乎肯定這是一件簡單的事情,但我不能爲我的生活弄清楚它。這整個代碼是打印一個菜單,詢問用戶和數組大小,然後用隨機數填充它,對其進行升序和降序排序,打印數組,並讓用戶使用二分搜索或順序搜索。我知道線性搜索對於我們應該做的事情來說效率要高很多,但教練堅持要進行二分搜索。我有二進制搜索工作,並打印出正確的結果,但在其結尾處有一個1(即位置14出現爲141)。下面是調用該函數的開關情況:二進制搜索在輸出結束時不斷添加1

case 7: 
    int num, result; 
    cout << "Please enter an int to search for" << endl; 
    cin >> num; 
    result = binarySearch(Array1, num, 0, size); 
    cout << num << "was found at position " << result; 
    break; 
    } 
} 

這裏是功能:

int binarySearch(int arr[], int key, int first, int last) 
{ 
    while (first <= last) 
    { 
     int mid = (last + first)/2; 
     if (key < arr[mid]) 
     { 
      last = mid - 1; 
     } 
     else if (key > arr[mid]) 
     { 
      first = mid + 1; 
     } 
     else 
     { 
      return mid; 
     } 
    } 
    return -1; 
} 
+4

你不這樣做'COUT << ENDL。; '所以額外的'1'來自其他地方。 – Roddy

+2

因爲1是打印出來的,不管你是什麼搜索,二進制搜索邏輯不太可能存在問題。 binarySearch方法是正確的。你可以發佈切換條件後發生的事情嗎? –

+0

這就是爲什麼你應該在提出問題之前嘗試做一個簡潔的測試用例。你會發現你認爲的問題是問題不是問題。 – Cogwheel

回答

2

剛試過的代碼我的機器上 - 我沒有得到附加輸出額外的1。所以,我會認爲1正在打印出其他地方。

首先,在cout的末尾添加空格(或endl。這將確認您得到的結果是否正確,並且還有其他地方正在打印1,然後您可以嘗試尋找額外的1被印在你的代碼(開關()之後可能)

cout << num << "was found at position " << result << " ";

更新代碼的其餘部分,如果你需要進一步的幫助

+0

謝謝你的幫助,全部原因是因爲我忘了把結果放在結果後。放完之後1不再出現。 – user2325795