使用 JavaScript 進行二叉搜尋
本文將探討使用 JavaScript 二叉搜尋元素的兩種方法。
第一個是迭代方式,第二個是遞迴方式。
通過 JavaScript 中的 Iterative 方法進行二叉搜尋
let binarySearchIterativeMethod =
function(myValuesArray, searchingElement) {
let startingIndex = 0, endingIndex = myValuesArray.length - 1;
while (startingIndex <= endingIndex) {
let midIndex = Math.floor((startingIndex + endingIndex) / 2);
if (myValuesArray[midIndex] === searchingElement)
return true;
else if (myValuesArray[midIndex] < searchingElement)
startingIndex = midIndex + 1;
else
endingIndex = midIndex - 1;
}
return false;
}
let myValuesArray = [1, 3, 5, 7, 8, 9];
let searchingElement = 5;
if (binarySearchIterativeMethod(myValuesArray, searchingElement))
console.log('Element found in an Array');
else
console.log('Element not found an Array');
searchingElement = 6;
if (binarySearchIterativeMethod(myValuesArray, searchingElement))
console.log('Element found in an Array');
else
console.log('Element not found in an Array');
輸出:
For searchingElement value 5 we got
Element found in an Array
For searchingElement value 6 because its not in our array we got
Element not found in an Array
在上面的程式碼中,我們首先宣告瞭一個名為 binarySearchIterativeMethod 的函式,它接受兩個引數。第一個是陣列,第二個是我們要搜尋的元素。
該函式宣告並初始化兩個變數,如 startingIndex 和 endingIndex。startingIndex 初始化為零,因為我們想從第一個 index 迭代我們的陣列。
結束索引 使用陣列的長度進行初始化。之後,我們將建立一個 while 迴圈,該迴圈將迭代整個陣列,直到滿足條件。
這個迴圈將迭代陣列直到 startingIndex 小於或等於 endingIndex。簡單地說,它意味著沒有將要測試的陣列的非法索引。
在任何情況下,如果出現非法索引,它將終止迴圈。在這個 loop 中,首先,我們獲取陣列的 middleIndex 並取其底值。
這意味著如果 startingIndex 是 0 並且 endingIndex 是 9。如果我們將該值除以 2,我們將得到 4.5,這不是一個有效的索引。所以我們取它的底值,比如 5。
然後我們將檢查 middleIndex's 值上是否存在 searchingElement,然後返回 true。如果沒有發生,我們將檢查我們的 searchingElement 是否小於 middleIndex 值,然後我們在左側執行搜尋。
如果我們的 searchingElement 大於給定 array 的 middleIndex,我們將從陣列的右側搜尋。如果這些情況沒有發生,那麼我們返回 false。
之後,我們將建立一個 array,對其進行初始化,然後建立一個名為 searchingElement 的變數並使用值 6 對其進行初始化。
之後,我們呼叫函式 binarySearchIterativeMethod 並傳遞 array 和搜尋元素並檢查它是否該函式返回 true,我們將找到輸出值。如果一個函式沒有返回 true,我們顯示 Item is not found。
通過 JavaScript 中的遞迴方法進行二叉搜尋
let binarySearchRecursiveFunction =
function(arr, x, startIndex, endIndex) {
if (startIndex > endIndex) return false;
let middleIndex = Math.floor((startIndex + endIndex) / 2);
if (arr[middleIndex] === x) return true;
if (arr[middleIndex] > x)
return binarySearchRecursiveFunction(arr, x, startIndex, middleIndex - 1);
else
return binarySearchRecursiveFunction(arr, x, middleIndex + 1, endIndex);
}
let arr = [1, 3, 5, 7, 8, 9];
let x = 5;
if (binarySearchRecursiveFunction(arr, x, 0, arr.length - 1))
console.log('Element found in an Array');
else
console.log('Element not found in an Array');
x = 9;
if (binarySearchRecursiveFunction(arr, x, 0, arr.length - 1))
console.log('Element found in an Array');
else
console.log('Element not found in an Array');
輸出:
For searchingElement value 5 we got
Element found in an Array
For searchingElement value 9 because its not in our array we got
Element not found in an Array
在上面的函式中,我們首先檢查如果 startIndex 大於 endIndex,我們將返回 false。
然後,我們將檢查名為 x 的搜尋元素是否等於給定 array 的中間索引,然後我們將返回 true。如果搜尋元素小於中間索引,我們從 array 的左側搜尋。
如果搜尋元素大於 array 的中間元素,我們將從二叉樹的右側開始搜尋。