二进制搜索问题的(“向量下标超出范围”) 我尝试在C++中实现二值搜索功能,在这个函数中,我已经对整数向量进行排序,然后输入整数向量来检查我搜索的值的索引,如果没有找到值,则应该返回1的
问题是我收到消息_DEBUG_ERRORvector下标超出范围;调试时 这是密码二进制搜索问题的(“向量下标超出范围”) 我尝试在C++中实现二值搜索功能,在这个函数中,我已经对整数向量进行排序,然后输入整数向量来检查我搜索的值的索引,如果没有找到值,则应该返回1的,c++,algorithm,vector,binary-search,C++,Algorithm,Vector,Binary Search,问题是我收到消息_DEBUG_ERRORvector下标超出范围;调试时 这是密码 #include <iostream> #include <cassert> #include <vector> using std::vector; int binary_search(const vector<int> &a, int x, int left, int right) { left = 0; right = (int)
#include <iostream>
#include <cassert>
#include <vector>
using std::vector;
int binary_search(const vector<int> &a, int x, int left, int right) {
left = 0;
right = (int)a.size();
if (left > right) return -1;
int mid = (left + ((left - right) / 2));
if (a[mid] == x)
{
return mid;
}
else if (x > mid)
{
return binary_search(a, x, mid + 1, right);
}
else if (x < mid)
return binary_search(a, x, left, mid - 1);
}
int linear_search(const vector<int> &a, int x) {
for (size_t i = 0; i < a.size(); ++i) {
if (a[i] == x) return i;
}
return -1;
}
int main() {
int n;
std::cin >> n;
vector<int> a(n);
for (size_t i = 0; i < a.size(); i++) {
std::cin >> a[i];
}
int m;
std::cin >> m;
vector<int> b(m);
int left =0;
int right= (int)a.size() - 1 ;
for (int i = 0; i < m; ++i) {
std::cin >> b[i];
}
for (int i = 0; i < m-1; ++i) {
std::cout << binary_search(a, b[i], left, right) << ' ';
}
}
此代码有两个问题: 在二进制搜索函数中,首先为参数指定新值,这将导致无限递归。只需删除此任务 您的mid分配如下:int mid=左+左-右/2;但是应该是这样的:int mid=left+right-left/2;您当前的mid始终小于或等于left,您的错误出现在这里,因为您尝试使用负索引right应该初始化为inta.size-1。不,等等。由于这是二进制搜索的递归实现,因此不必在函数内部对左、右进行初始化。它们的值来自上一次调用。