查詢演算法 二分查詢

2021-09-29 20:48:26 字數 2955 閱讀 4586

二分查詢的思路是很簡單的,前提是這組資料是有順序的。 思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數
時間複雜度就是 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...