簡體   English   中英

在javascript中實現二進制搜索

[英]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] + "&nbsp;"; } 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] + "&nbsp;"; } 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM