我一直在嘗試過去的一小時,以獲得此二進制搜索算法的工作,並通過使用可汗學院解釋算法的一個例子,我仍然無法工作,它應該輸出一個數字,但沒有任何反應。上汗學院的示例是這樣的:試圖實現二進制搜索算法,似乎無法使其工作
- 讓分鐘= 0和max = n-1個。
- 如果最大值爲<分鐘,則停止:目標不在陣列中。返回-1。
- 計算最大值和最小值的平均值,向下舍入(使其爲整數)。
- 如果array [guess]等於target,則停止。你找到了!返回猜測。
- 如果猜測值太低,就是數組[猜測] <的目標,那麼設置min = guess + 1.
- 否則,猜測值太高。設置最大=猜測 - 1
- 回到步驟2
和代碼我寫根據步驟是:
#include <iostream>
int main() {
int arr[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 };
int min = 0;
int max = 24;
int guess;
int targetValue = 73;
while (max > min) {
guess = ((max + min)/2);
if (arr[guess] == targetValue) {
std::cout << guess;
break;
}
else if (arr[guess] < targetValue) {
min = guess + 1;
}
else {
max = guess - 1;
}
}
return 0;
}
正如此言,你應該寫'的std ::法院<<猜<<的std :: endl',以便輸出緩衝區被刷新。 – ypnos
@ypnos指出,謝謝。 – JAin
將'std :: cout << min <<「」<< max << std :: endl;'作爲'while循環的第一行並且它會幫助你診斷..你會看到這個程序現在暫停在最小=最大= 20處' – quetzalcoatl