python 中的二分查詢bisect

2021-10-10 17:21:40 字數 1055 閱讀 7987

對於排序好的列表(公升序,降序的不行),bisect模組可以快速查詢、插入,保持公升序。

bisect.bisect_left(a, x, lo=0, hi=len(a))

bisect.bisect(a, x, lo=0, hi=len(a))

二者同樣是:在 a 中找到 x 合適的插入點以維持有序,引數 lo 和 hi 可以被用於確定需要考慮的子集。不同點在於:若x已存在於a,那麼bisect_lef的插入點會在已存在元素之前(也就是左邊),而bisect返回的插入點是 a 中已存在元素 x 的右側。

in [16]

:import bisect

in [21]

: a,b=

[i for i in

range(5

)],[i for i in

range(5

)]in [22]

: aout[22]

:[0,

1,2,

3,4]

in [23]

: bout[23]

:[0,

1,2,

3,4]

in [24]

: bisect.bisect(a,

3.5)

out[24]

:4in [25]

: bisect.bisect_left(a,

3.5)

out[25]

:4in [26]

: bisect.bisect(a,3)

out[26]

:4in [27]

: bisect.bisect_left(a,3)

out[27]

:3

bisect.insort_left(a, x, lo=0, hi=len(a))

bisect.insort(a, x, lo=0, hi=len(a))

而這差別類似bisect_leftbisect

Python二分查詢

二分查詢又稱折半查詢,首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成...

python 二分查詢

搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半 param array ...

二分查詢(Python)

演算法介紹 二分查詢要求陣列為有序排列,每次取中間的數與target進行比較,若相等,則查詢成功 若中間數較大,則在前一部分查詢,反之,在後一部分查詢。其時間複雜度為o logn 演算法實現def binarysearch nums,target if not nums return false s...