javascript - 执行二进制搜索时如何正确显示数组中不存在值

标签 javascript algorithm binary-search

我正在尝试用 JavaScript 实现二进制搜索。我能够返回目标元素的索引,但是,我的程序没有返回“-1”来指示目标值不存在于数组中。例如,如果我有一个 [12, 39, 52, 61, 88, 100] 的数组,并且我将目标值“200”输入到我的二进制搜索函数中,它不会返回“-1”来表示即使我构造了 else 语句来执行此操作,该值也不存在于数组中。谁能告诉我我做错了什么?提前致谢。

我的代码:

function binarySearch(arr, target){
var start = 0;
var end = arr.length - 1;

while(start <= end){

    var mid = Math.floor((start +  end)/2);

    if(arr[mid] < target){
        start = mid + 1;
    }

    else if(arr[mid] === target){
        return mid;
    }

    else if(arr[mid] > target) {
        end = mid - 1;
    }

    else {
        return -1;
      }
    }
  }

var myArr = [12, 39, 52, 61, 88, 100];
binarySearch(myArr, 200);

最佳答案

您需要将-1 的返回值移出while 循环,因为如果循环内没有返回,则您的值还没有找到.所以最后只返回-1

即使是最后一次检查,您也可以省略,在检查了更小或相等的值之后,剩下的总是更大。

function binarySearch(arr, target) {
    var start = 0,
        end = arr.length - 1,
        mid;

    while (start <= end) {
        mid = Math.floor((start + end) / 2);
        if (arr[mid] < target) {
            start = mid + 1;
            continue;
        } 
        if (arr[mid] === target) {
            return mid;
        }
        end = mid - 1;
    }
    return -1;
}

var myArr = [12, 39, 52, 61, 88, 100];

console.log(binarySearch(myArr, 200));  // -1
console.log(binarySearch(myArr, 12));   //  0
console.log(binarySearch(myArr, 39));   //  1
console.log(binarySearch(myArr, 52));   //  2
console.log(binarySearch(myArr, 61));   //  3
console.log(binarySearch(myArr, 88));  //   4
console.log(binarySearch(myArr, 100));  //  5

关于javascript - 执行二进制搜索时如何正确显示数组中不存在值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46109933/

相关文章:

javascript - 我可以重置 jQuery 全局对象的名称吗?

javascript - 为什么 Jquery/ajax 调用 RESTful 服务无法获得成功回调?

javascript - 使用 window.open 方法

javascript - 在 chrome 扩展中,如何使用内容脚本注入(inject) Vue 页面

java - 良好的线程设计 : "Method in Thread" or "Thread in Method"

algorithm - 渐进复杂性、算法

c++ - 具有三向比较谓词的 STL 函数

java - 创建了我自己的二分搜索版本,不明白为什么它比常规方法更快?

algorithm - 为什么程序员更喜欢 O(N^3) 而不是 O(N^2)

python - 二进制搜索中的无限循环