【问题标题】:Binary search always return -`二分查找总是返回 -`
【发布时间】:2020-06-22 10:11:05
【问题描述】:

我正在尝试使用 JS 实现二进制搜索,但它进入了无限循环。它不会返回位置。我不确定我在做什么。

代码:

function binarySearch(value, list) {
    let initial = 0;
    let end = list.length - 1;
    let found = false;
    let middle;
    let position = -1;
  
    while (found != true && initial <= end){
      middle = Math.round(initial + end) / 2;
      if (value == list[middle]) {
      found = true;
      position = middle;
      } else if (value < list[middle]) end = middle - 1;
      else initial = middle + 1;
  }
      console.log(position) ;
  
  }
binarySearch(3, [1, 3, 5, 6]);

【问题讨论】:

  • 你为什么有middle = Math.round(initial + end) / 2。不应该是middle = Math.round((initial + end) / 2)吗?您不想四舍五入两个整数的总和,然后除以 2。

标签: javascript algorithm data-structures binary-search


【解决方案1】:

你有middle = Math.round(initial + end) / 2;,它并不总是产生一个整数。

将其更改为 middle = Math.round((initial + end) / 2); 以始终获取整数。

【讨论】:

    【解决方案2】:

    下面的代码总是正确的,因此是一个无限循环。

    while (found != true && initial <= end)
        middle = Math.round(initial + end) / 2;
    

    将代码放在大括号内

    
    function binarySearch(value, list) {
      let initial = 0;
      let end = list.length - 1;
      let found = false;
      let middle;
      let position = -1;
    
      while (found != true && initial <= end){
        middle = Math.round((initial + end) / 2);
        if (value == list[middle]) {
        found = true;
        position = middle;
        } else if (value < list[middle]) end = middle - 1;
        else initial = middle + 1;
    }
        return position;i
    
    }
    

    【讨论】:

    • 它总是返回-1。
    • 我在粘贴初始代码后编辑了括号。请检查!
    • Math.round((initial + end) / 2)...这是问题..更新它。
    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2020-10-26
    • 2021-06-28
    • 2017-04-03
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多