【发布时间】:2020-01-15 03:01:30
【问题描述】:
我写了一个分而治之的二进制搜索,它适用于所有情况,除了当我搜索第一个或最后一个数字时,它给我的结果不是 0 和 v.size()-1 1 和 v.size()-2。
例如,如果我输入 n=5 和向量 {1; 2; 3; 4; 5} 并搜索 1 它返回“1”而不是“0”。
#include <iostream>
#include <vector>
using namespace std;
int binarySearch(std::vector<int> v, int nr, int left, int right)
{
int mij = (left + right) / 2;
if (v[mij] < nr){
binarySearch(v, nr, mij+1, right);
}
else if (v[mij] > nr){
binarySearch(v, nr, left, mij-1);
}
else if (v[mij] == nr){
return mij;
}
else return -1;
}
int main()
{
vector <int> v;
int n; cout << "n="; cin >>n;
for (int i = 0; i < n; i++){
int x;
cout << "v[" << i << "]=";
cin >> x;
v.push_back(x);
}
cout << binarySearch(v, 1, 0, v.size());
return 0;
}
【问题讨论】:
-
这是一个练习调试技能的好机会。启动您选择的调试器并逐行执行程序。对于每一行,检查程序是否执行您手动进行二进制搜索时会执行的操作。
-
是的,我做到了。调试器说 mij 是 0,就在它返回之前,但我的屏幕打印出 1。
标签: c++ recursion binary-search divide-and-conquer