[英]Implementing binary search in javascript
我想在javascript中實現二進制搜索。 我不知道我的腳本出了什么問題。 每當我點擊搜索按鈕時,頁面都會無響應。謝謝。
var i,print,arr; arr = [1,2,3,4,5,6,7,8,9,10]; print = document.getElementById("showArray"); for(i = 0; i < arr.length; i++){ print.innerHTML += arr[i] + " "; } function binarySearch(searchValue){ var lowerIndex, higherIndex, middleIndex,writeResult; lowerIndex = 0; higherIndex = arr.length; writeResult = document.getElementById("showResult"); while(lowerIndex <= higherIndex){ middleIndex = (higherIndex + lowerIndex) / 2; if(searchValue == arr[middleIndex]){ writeResult.innerHTML = "PRESENT"; consol.log('Present'); break; } else if(searchValue > arr[middleIndex]){ lowerIndex = middleIndex + 1; } else if(searchValue < arr[middleIndex]){ higherIndex = middleIndex - 1; } } }
<button onclick = "binarySearch(1)">SEARCH</button> <p id = "showArray" style = "font-size: 40px; padding:0px;"> </p> <p id = "showResult">Result is:</p>
嘗試類似的東西
Array.prototype.br_search = function (target)
{
var half = parseInt(this.length / 2);
if (target === this[half])
{
return half;
}
if (target > this[half])
{
return half + this.slice(half,this.length).br_search(target);
}
else
{
return this.slice(0, half).br_search(target);
}
};
l= [0,1,2,3,4,5,6];
console.log(l.br_search(5));
主要問題是,你有沒有使用middleIndex
計算的整數部分。 這使得無法檢查數組的給定索引處的值,因為索引必須是整數。
var i, print = document.getElementById("showArray"), arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; for (i = 0; i < arr.length; i++) { print.innerHTML += arr[i] + " "; } function binarySearch(searchValue) { var lowerIndex = 0, higherIndex = arr.length - 1, middleIndex, writeResult = document.getElementById("showResult"); while (lowerIndex <= higherIndex) { middleIndex = Math.floor((higherIndex + lowerIndex) / 2); if (searchValue == arr[middleIndex]) { writeResult.innerHTML = "PRESENT " + middleIndex; break; } if (searchValue > arr[middleIndex]) { lowerIndex = middleIndex + 1; } else { higherIndex = middleIndex - 1; } } }
<button onclick="binarySearch(2)">SEARCH</button> <p id="showArray" style="font-size: 40px; padding:0px;"> </p> <p id="showResult">Result is:</p>
二進制搜索的一個迭代示例,沒有break
。
運行時間: log2(n)
function search(array, target) { let min = array[0] let max = array.length - 1; let guess; while (max >= min) { guess = Math.floor((min+max)/2); if (array[guess] === target) { return guess; } else if (array[guess] > target) { max = guess - 1; } else { min = guess + 1; } } return -1; } const primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; console.log(search(primes, 67));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.