首頁 >web前端 >js教程 >JS數組搜尋之折半搜尋的實作方法詳解

JS數組搜尋之折半搜尋的實作方法詳解

黄舟
黄舟原創
2017-03-27 14:39:071386瀏覽

這篇文章主要介紹了JS陣列搜尋之折半搜尋實作方法,結合具體實例形式分析了javascript數組折半搜尋演算法的原理、實作技巧與相關注意事項,需要的朋友可以參考下

本文實例講述了JS數組搜尋之折半搜尋實作方法。分享給大家供大家參考,具體如下:

一. 方法原理:

當從一個給定的序列數組arr中, 查找某個特定值value時, 折半搜尋法是這樣做的:

1. 確定搜尋範圍的起始點: 起點startIndex = 0, 終點endIndex = arr.length - 1;

2. 根據起始點來確定一個中間點middle = Math.floor((終點- 起點) / 2);

#3. 在startIndex a09a6726fa309d8dcbfa1b2471663cf5 value

調整搜尋範圍為陣列的前半部, 即startIndex = 0, endIndex = middle - 1;

#接著, 重新計算middle, 再比較arr[middle]與value, 直到兩者相等或startIndex >= endIndex.

二. 程式碼:

// 该例的写法适用于序列为由小到大的数组
function binarySearch(arr, value) {
  var startIndex = 0,
  endIndex = arr.length - 1;
  middle = Math.floor((endIndex - startIndex) / 2);
  while (arr[middle] !== value && startIndex < endIndex) {
    if (arr[middle] > value) {
      endIndex = middle - 1;
    } else if (arr[middle] < value) {
      startIndex = middle + 1;
    }
    middle = Math.floor((endIndex - startIndex) / 2);
  }
  return (arr[middle] !== value) ? -1 : middle;
}

#三. 優缺點:

(1) 優點:

每查找一次, 被尋找的陣列項數會減少一半, 因此其在效能上要優於線性搜尋法(在陣列項目較多時, 尤其明顯);

(2) 缺點:

只適用於序列數組, 在對普通數組使用該方法之前, 需要對數組進行排序

以上是JS數組搜尋之折半搜尋的實作方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn