我不明白为什么我的二进制搜索代码显示分段错误

球罐

我已经测试了向量 a = {1,5,8,12,13} 和 x = 23 的代码,它给我发送了一个分段错误,我不明白为什么:

#include <iostream>
#include <cassert>
#include <vector>
#include <cmath>

using std::vector;

int binary_search(const vector<int> &a, int x) {
    int left = 0, right = (int)a.size(); 
    if(left>right) return -1;
    right = floor((double)(left + right)/2);
    if(a[right] == x){
        return right;
    }
    else if(a[right]>x){
        vector<int> w(a.begin(), a.begin() + right);
        return binary_search(w,x);
    }
    else{
        vector<int> w(a.begin() + right, a.end());
        return binary_search(w,x);
    }
}

当程序创建的向量 w 的大小为 1 时,它应该进入无限循环,不是吗?

迪帕克·帕坦卡

我们可以有索引startend并且可以指向要进行二分查找的子数组,这样我们就不必显式创建子数组。

int binary_search(vector<int> &a, int start, int end, int x) {
    if(start > end) 
       return -1;
    int mid = floor((double)(start + end)/2);
    if(a[mid] == x){
        return mid;
    }
    else if(a[mid] > x){
        return binary_search(a, 0, mid - 1, x);
    }
    else{
        return binary_search(a, mid + 1, end, x);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我正在尝试对运算符“+”进行二进制重载,但输出错误,我不明白为什么?

不明白为什么我不能在tclsh中执行命令行二进制文件

我有分段错误,我不明白为什么

将整数转换为二进制。我不明白这个功能是如何工作的

以下C代码输出一个分段错误错误,我几乎不明白为什么

我不明白为什么会收到“分段错误(核心已转储)”错误

我不明白为什么我的 super() 产生错误

我不明白为什么这段代码会出现分段错误。拜托,谁能告诉我我在哪里分配了无法使用的内存

我不明白为什么编译器会给我这个代码错误

我的代码输出错误,我不明白为什么

我不明白为什么我的代码中出现这个未定义的错误

我不明白为什么这段代码不能运行?

代码无限循环,我不明白为什么

我不明白为什么它向我显示函数、缩进和其他错误

每隔几次尝试运行我的构建,我就会遇到分段错误。我不明白为什么

我不明白为什么会收到以下错误

我不明白为什么会收到此错误

我不明白为什么它说 ArrayOutOfBound 错误

我不明白为什么编译

我不明白为什么我在下面的代码中出现语法错误。谁能帮我?

为什么这样工作?我不明白为什么我的代码可以在C中工作

我不明白的错误

我不明白为什么我尝试时我的代码无法采用CSS

我不明白为什么这段代码在我的代码中以这种方式工作

这个python二进制搜索代码有什么问题,我收到一个索引错误

我不明白我的代码中正在发生什么

我不明白为什么我的波形是这样出来的

我不明白为什么我的团队失败了

我不明白为什么我的 APCS 多项选择书中的这段代码返回 19