[英]Recursive binary search with three arguments in C++
我正在嘗試正確地進行這種遞歸二分搜索,並且已經走到了這一步。 到目前為止,我可以正確顯示上半部分,但是中間的右側顯示為好像它在左側的位置。 我哪里錯了?
#include <iostream>
using namespace std;
int binarySearch(int array[], int size, int searchValue)
{
cout << "BST with size = " << size << "[ ";
for (int i = 0; i < size; ++i){
cout << array[i] << " ";
}
cout << " ]" << endl;
if (size >= 1)
{
int mid = (size - 1) / 2;
cout << "Mid " << mid << endl;
if (array[mid] == searchValue)
{
return mid;
}
if (array[mid] > searchValue)
{
return binarySearch(array, mid, searchValue);
}
if (array[mid] < searchValue)
{
return binarySearch(array+mid+1, size-(mid + 1), searchValue);
}
}
return -1;
}
int main() {
int val, myNums[1000]; // Yuck--magic number!
int pos, cnt = -1;
cout << "Enter numbers from smallest to largest, 0 to stop\n";
do {
cin >> myNums[++cnt];
} while (myNums[cnt] != 0);
do {
cout << "Enter number to search for: ";
cin >> val;
if (val != 0) {
pos = binarySearch(myNums, cnt, val);
cout << "binarySearch reported " << pos << endl;
}
} while (val != 0);
return 0;
}
這段代碼不正確,有一個非常錯誤的錯誤 - 您試圖獲取某個固定數組中某個值的偏移量,但您確實在此處操作了該數組:
return binarySearch(**array+mid+1**, size-(mid + 1), searchValue);
你可以清楚地看到這個函數不起作用,因為array+mid+1,如果是mid之后的第一個元素,將返回0,而它應該返回:(int)(size/2)+1
我建議您將“開始”和“結束”范圍變量傳遞給函數。
還有這段文字:
cout << "BST with size = " << size << "[ ";
BST 中的 T 代表“樹”,但您不創建任何樹。
而不是這部分:
if (array[mid] < searchValue)
{
return binarySearch(array+mid+1, size-(mid + 1), searchValue);
}
您可以使用:
if (array[mid] < searchValue)
{
int ans = binarySearch(array+mid+1, size-(mid + 1), searchValue);
if (ans == -1)
return -1;
return mid + ans + 1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.