JS二分查找算法詳解
二分法查找,也稱折半查找,是一種在有序數(shù)組中查找特定元素的搜索算法。查找過(guò)程可以分為以下步驟:
(1)首先,從有序數(shù)組的中間的元素開(kāi)始搜索,如果該元素正好是目標(biāo)元素(即要查找的元素),則搜索過(guò)程結(jié)束,否則進(jìn)行下一步。
(2)如果目標(biāo)元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半?yún)^(qū)域查找,然后重復(fù)第一步的操作。
(3)如果某一步數(shù)組為空,則表示找不到目標(biāo)元素。
參考代碼:
// 非遞歸算法
function binary_search(arr, key) {
var low = 0,
high = arr.length - 1;
while(low <= high){
var mid = parseInt((high + low) / 2);
if(key == arr[mid]){
return mid;
}else if(key > arr[mid]){
low = mid + 1;
}else if(key < arr[mid]){
high = mid -1;
}else{
return -1;
}
}
};
var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result = binary_search(arr,10);
alert(result); // 9 返回目標(biāo)元素的索引值
// 遞歸算法
function binary_search(arr,low, high, key) {
if (low > high){
return -1;
}
var mid = parseInt((high + low) / 2);
if(arr[mid] == key){
return mid;
}else if (arr[mid] > key){
high = mid - 1;
return binary_search(arr, low, high, key);
}else if (arr[mid] < key){
low = mid + 1;
return binary_search(arr, low, high, key);
}
};
var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result = binary_search(arr, 0, 13, 10);
alert(result); // 9 返回目標(biāo)元素的索引值
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript頁(yè)面刷新與彈出窗口問(wèn)題的解決方法
解決JavaScript頁(yè)面刷新與彈出窗口問(wèn)題2010-03-03
JavaScript array常用方法代碼實(shí)例詳解
這篇文章主要介紹了JavaScript array常用方法代碼實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
超越Jquery_01_isPlainObject分析與重構(gòu)
isPlainObject是Jquery1.4后提供的新方法,用于判斷對(duì)象是否是純粹的對(duì)象(通過(guò) {} 或者 new Object 創(chuàng)建的)。2010-10-10
JS使用鏈?zhǔn)綄傩员磉_(dá)式取值和賦值的實(shí)現(xiàn)方法
這篇文章主要給大家詳細(xì)介紹了JS如何使用鏈?zhǔn)綄傩员磉_(dá)式取值和賦值,文章通過(guò)代碼示例介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考一下2023-08-08
js鎖屏解屏通過(guò)對(duì)$.ajax進(jìn)行封裝實(shí)現(xiàn)
js鎖屏解屏是通過(guò)對(duì)$.ajax進(jìn)行封裝實(shí)現(xiàn)的,需要的朋友可以參考下2014-07-07
JavaScript手寫(xiě)一個(gè)前端存儲(chǔ)工具庫(kù)
在項(xiàng)目開(kāi)發(fā)的過(guò)程中,為了減少提高性能,減少請(qǐng)求,開(kāi)發(fā)者往往需要將一些不易改變的數(shù)據(jù)放入本地緩存中。本文就來(lái)用JavaScript手寫(xiě)一個(gè)前端存儲(chǔ)工具庫(kù),希望對(duì)大家有所幫助2023-02-02
JS控件autocomplete 0.11演示及下載 1月5日已更新
JS控件autocomplete 0.11演示及下載 1月5日已更新...2007-01-01
JavaScript生成隨機(jī)數(shù)的各種方法大全
JavaScript 是一門(mén)強(qiáng)大的編程語(yǔ)言,在前端和后端開(kāi)發(fā)中廣泛使用,生成隨機(jī)數(shù)是 JavaScript 開(kāi)發(fā)中的常見(jiàn)需求,應(yīng)用場(chǎng)景包括游戲開(kāi)發(fā)、驗(yàn)證碼生成、數(shù)據(jù)模擬等,本文將詳細(xì)介紹 JavaScript 中生成隨機(jī)數(shù)的各種方法,并分析其適用場(chǎng)景和優(yōu)缺點(diǎn),需要的朋友可以參考下2025-03-03

