亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

二分查找總是返回 -`

二分查找總是返回 -`

莫回無 2022-10-13 16:08:21
我正在嘗試使用 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]);
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

你有middle = Math.round(initial + end) / 2;which 并不總是導致整數。

將其更改middle = Math.round((initial + end) / 2);為始終獲取整數。


查看完整回答
反對 回復 2022-10-13
?
MM們

TA貢獻1886條經驗 獲得超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


}


查看完整回答
反對 回復 2022-10-13
  • 2 回答
  • 0 關注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號