我正在嘗試編寫一個我從未做過的「二分查找」。當搜索的值是6或2時,下面的代碼不起作用,我想知道我在做什麼錯誤以及如何解決它。如何使用遞歸創建二進制搜索
編輯
爲了解釋什麼是該做的(根據我的理解)的二進制搜索需要一個數組已經排序,它然後尋找一個數組的中點指數。例如,如果陣列有九個索引(0-8)的中點。將指數4.
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
該算法然後確定是否該中點具有比要搜索的數目更高或更低的值對於。數組一側的所有元素不包含搜索到的數字,並且只存在於中點值之前。如果值搜索是8,那麼結果將是:
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
array midpoint value: 5
[ 5, 6, 7, 8, 9 ]
array midpoint value: 7
[ 7, 8, 9 ]
array midpoint value: 8
代碼
//_________________________________________________BEGIN notes
// Step 1. Get length of array
// Step 2. Find mid point
// Step 3. Compare if mid point is lower or higher than searched number
// Step 4. lop off unneeded side
// Step 5. go to step 1
//_________________________________________________END notes
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 44, 55];
function getMidPoint(arr, searchNumb) {
var length = arr.length;
var midPoint = Math.floor(length/2);
var newArr = arr;
console.log(arr);
console.log("array midpoint value: " + arr[midPoint]);
if (arr[midPoint] > searchNumb) {
var newArr = arr.slice(0, arr[midPoint]);
return getMidPoint(newArr, searchNumb);
} else if (arr[midPoint] < searchNumb) {
var newArr = arr.slice(midPoint, arr.length);
return getMidPoint(newArr, searchNumb);
} else {
return arr
}
}
你切錯了。 – vish4071
順便說一句,如果你避免局部變量(儘可能)並且傳遞本地狀態作爲參數,數據流將更加清晰([示例])(https://github.com/addyosmani/recursive-binarysearch/blob/主/ index.js))。 – ftor