二分查詢的思路是很簡單的,前提是這組資料是有順序的。 思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數
時間複雜度就是 o(logn)
非遞迴的實現
const testarr =
let i =
0while
(i <
10000
) console.
log(testarr)
let a =
bsearch
(testarr, testarr.length,
5554
) console.
log(a)
function
bsearch
(arr, n, value)
else
if(arr[mid]
< value)
else
}return-1
}
遞迴實現
const testarr =
let i =
0while
(i <
10000
) console.
log(testarr)
let a =
bsearch
(testarr, testarr.length,
5554
) console.
log(a)
function
bsearch
(arr, n, value)
function
bsearchinternally
(a, low, hight, value)
let mid =
parseint
((low + hight)/2
)if(a[mid]
=== value)
else
if(a[mid]
< value)
else
}
二分查詢應用場景的侷限性
二分查詢依賴的是順序表結構,簡單點說就是陣列。
二分查詢針對的是有序資料
資料量太小不適合二分查詢
資料量太大也不適合二分查詢 (陣列需要連續的儲存空間,太大的資料需要開闢很大的記憶體)
變形問題
1. 查詢第乙個等於給定值的元素
2. 查詢最後乙個等於給定值的元素
3. 查詢第乙個大於等於給定值的元素
4. 查詢最後乙個小於等於給定值的元素
查詢第乙個等於給定值的元素
const testarr =
let i =
0while
(i <
10000
)else
i++} console.
log(testarr)
let a =
bsearch
(testarr, testarr.length,
5554
) console.
log(a)
function
bsearch
(a, n, value)
else
if(a[mid]
< value)
else
}return-1
;}
查詢最後乙個等於給定值的元素
const testarr =
let i =
0while
(i <
10000
)else
i++} console.
log(testarr)
let a =
bsearch
(testarr, testarr.length,
5554
) console.
log(a)
function
bsearch
(a, n, value)
else
if(a[mid]
< value)
else
else}}
return-1
;}
查詢第乙個大於等於給定值的元素
const testarr =
let i =
0while
(i <
10000
)else
i++} console.
log(testarr)
let a =
bsearch
(testarr, testarr.length,
5554
) console.
log(a)
function
bsearch
(a, n, value)
else
}return-1
;}
查詢最後乙個小於等於給定值的元素
const testarr =
let i =
0while
(i <
10000
)else
i++} console.
log(testarr)
let a =
bsearch
(testarr, testarr.length,
5554
) console.
log(a)
function
bsearch
(a, n, value)
else
}return-1
;}
查詢演算法 二分查詢
利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...
查詢演算法 二分查詢
二分查詢是乙個常用的查詢演算法,其原理在於通過不斷切分乙個規則排序,對半的去尋找目標元素所在的區間與位置。但是其有乙個前提,那就是資料結構需要是順序儲存結構,並且關鍵字大小有序排列。例子如下 例 有乙個數列 12,23,45,56,67,89 請使用二分查詢找到56的位置 解 首先mid 0 5 2...
查詢演算法 二分查詢
1 演算法介紹 1 序列必須是有序的 2 取序列的中間元素與查詢值比較,相等返回元素下標 3 根據序列公升序或降序,中間元素小於或大於查詢值的具體情況,選擇中間元素右邊或左邊的序列重複步驟 2 3 未找到返回 1。2 實現 2.1 golang package main import fmt fun...