【问题标题】:How to correctly show that a value isn't present in an array when performing a binary search执行二进制搜索时如何正确显示数组中不存在值
【发布时间】:2017-09-08 06:24:07
【问题描述】:

我正在尝试在 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);

【问题讨论】:

  • 在函数末尾写return -1。

标签: javascript algorithm binary-search


【解决方案1】:

您需要将-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

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 2013-03-29
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多