javascript - 数组极端情况下的二进制搜索

标签 javascript binary-search

我正在尝试实现二分搜索,除极端情况外,所有数字都运行良好:

const a = [1,2,3,4,5];

function findNum(arr, num) {
    let start=0, end = arr.length-1, mid = Math.floor((start+end)/2);

    while(start <= end) {
        mid = Math.floor((start+end)/2);
        if(mid===num) return true;
        else if(mid > num) end = mid-1;
        else start = mid+1;
    }
    return false;    
}

console.log(findNum(a, 5));

当我搜索“5”时,它返回 false,而不是 true。我在这里错过了什么?

所有其他情况都按预期正常工作。

最佳答案

您需要检查值,而不是索引。

const a = [1, 2, 3, 4, 5];

function findNum(arr, num) {
    let start = 0,
        end = arr.length - 1,
        mid = Math.floor((start + end) / 2);

    while (start <= end) {
        mid = Math.floor((start + end) / 2);
        if (arr[mid] === num) return true; // take value
        if (arr[mid] > num) end = mid - 1; // take value as well
        else start = mid + 1;
    }
    return false;
}

console.log(findNum(a, 0));
console.log(findNum(a, 1));
console.log(findNum(a, 2));
console.log(findNum(a, 3));
console.log(findNum(a, 4));
console.log(findNum(a, 5));
console.log(findNum(a, 6));

关于javascript - 数组极端情况下的二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530253/

相关文章:

algorithm - 我如何使用霍尔逻辑证明这种二进制搜索算法是正确的?

c++ - 实现二分查找

javascript - 如何检查一个类是否有值并在之后切换一个类

javascript - 尝试附加到文档时,responseXML 中缺少 head 子项

java小程序在chrome中不可见但在FF中工作

java - 二分查找算法的问题

java - 如何使用二分查找找到用户编号

c++ - 上限和下限的基本二进制搜索之间的区别?

javascript - 在js样式对象中设置自己的变量

javascript - SVG:将鼠标移动到 <image> 元素会触发父 <g> 元素的 mouseout 事件 (d3.js)