用 JavaScript 實現塊搜尋
塊搜尋
就像二分查詢,塊搜尋也是一個用於排序陣列的搜尋演算法。基本思想是透過固定步進或跳過某些元素而不是搜尋所有元素來檢查更少的元素(比線性搜尋)。
例如
假設我們有一個長度為 n 的陣列 arr 和大小為 m 的塊(要跳過)。然後我們從索引 arr[0]、arr[m]、arr[2 * m]、...、arr[k * m] 等進行搜尋。
一旦我們找到區間 arr[k * m] < x < arr[(k+1) * m],我們就從索引 k * m 開始執行線性搜尋操作以找到元素 x。
該演算法的時間複雜度為 -
O(√n)
示例
以下為程式碼 -
const arr = [1, 4, 6, 7, 9, 12, 15, 16, 17, 23, 25, 26, 27, 31]; const target = 25; const blockSearch = (arr = [], target) => { let { length: len } = arr; let step = Math.floor(Math.sqrt(len)); let blockStart = 0 let currentStep = step; while (arr[Math.min(currentStep, len) - 1] < target) { blockStart = currentStep; currentStep += step; if (blockStart >= len) return -1; } while (arr[blockStart] < target){ blockStart++; if (blockStart == Math.min(currentStep, len)) return -1; } if (arr[blockStart] == target) return blockStart else return -1; }; console.log(blockSearch(arr, target));
輸出
以下是控制檯上的輸出 -
10
廣告