javascript - 没有得到正确的二进制搜索算法

标签 javascript algorithm search binary-search

我正在尝试实现二进制搜索,我做了以下事情:

function bs(a,x) {
    // a : array to look into
    // x : number to find
    let mpoint = Math.floor(a.length / 2);
    if(x >= a[mpoint]) {
        if(x == a[mpoint]) { return mpoint;}
        else {
            return bs([...a].slice(mpoint,a.length), x)
        }
    }else {
        if(x == a[mpoint]) {return mpoint;}
        else {
            return bs([...a].slice(0,mpoint),x)
        }
    }
}


bs([ 2, 3, 4, 10, 40 ], 10)

但结果是我得到了一个不正确的 index。我做错了什么?

最佳答案

尝试改变:

return bs([...a].slice(mpoint,a.length), x)

到:

return bs([...a].slice(mpoint,a.length), x) + mpoint

关于javascript - 没有得到正确的二进制搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631854/

相关文章:

python - 数据功能在其域的一小部分上的多重集成 - 准确性和效率

java - 搜索算法 - Java

search - 将种子添加到随机 sphinx 搜索中

javascript - 为什么我的 minimax 算法不阻止我的 Action ?

c++ - 找到与给定数字相乘的数字的有效方法

javascript - 如何通过 Suitescript 2.0 在保存的搜索中应用多个过滤器?

javascript - 用于渲染 HTML 和 javascript 的 Python 库

javascript - 使用 console.log 时如何隐藏对象上的某些键

javascript - 如何在 OpenLayers3 中将图 block 层居中

javascript - 为什么我不能在我的 graphql 解析器中调用函数