JavaScript演算法:二分搜尋

二分搜尋是假設要搜尋的陣列(或其他資料結構)已經排序完成。 我們從陣列和要搜尋的項目開始。 我們查看陣列的中間。我們將元素數量除以2,想像一下左邊有一部分陣列,右邊有另一部分。 如果我們的項目比正在尋找的項目小,那麼它一定在右邊的部分,因此我們可以完全捨棄右邊的部分。 然後我們執行相同的操作,將陣列的右半部分除以2,查看中間的項目,並且我們捨棄陣列的一部分。 最後,你將得到該項目(如果沒有找到該項目,將返回null)。 最後,如果陣列有8個項目,我們在最壞的情況下將在最多4步內找到該項目。 如果陣列有32個項目,在最壞的情況下我們最多需要6步。相較於線性搜尋的32步,這是一個巨大的優化! 二分搜尋的時間複雜度為O(log n)。 以下是一種可能的實現方式: const binarySearch = (list, item) => { let low = 0 let high = list.length - 1 while (low <= high) { const mid = Math.floor((low + high) / 2) const guess = list[mid] if (guess === item) { return mid } if (guess > item) { high = mid - 1 } else { low = mid + 1 } } return null //如果未找到 } 這如何運作?我們得到list陣列和要搜尋的項目值。然後我們最初將low值設置為0,並將high值設置為陣列的最後一個索引。我們首先查看中間項目,如果它就是我們正在尋找的項目,我們將返回它,並結束。如果不是,我們將low或high值設置為只查看陣列的左半部分或右半部分,並且重複這個過程直到找到該項目。...

JavaScript演算法:線性搜索

線性搜索,也被稱為順序搜索或簡單搜索,是最基本的搜索演算法。給定一個資料結構,例如一個數組,我們通過查看所有元素來搜索某個項目,直到找到為止。 它的實現非常簡單: const linearSearch = (list, item) => { for (const [i, element] of list.entries()) { if (element === item) { return i; } } }; 這會返回我們要查找的項目的索引。例如: linearSearch(['a', 'b', 'c', 'd'], 'd'); //3(索引從0開始) 如果我們查找的是’a’,該演算法只會查看第一個元素並返回,所以速度非常快。 但是如果我們查找的是最後一個元素,該演算法需要遍歷整個數組。計算大O值時,我們始終考慮最壞情況。 因此,該演算法的時間複雜度(演算法複雜度)為O(n)。