python實現二分查詢及bisect模組的簡介

2021-07-02 13:04:43 字數 1023 閱讀 5430

在查詢方面,python中有list.index()的方法。

>>> a=[2,4,1,9,3]           #list可以是無序,也可以是有序

>>> a.index(4) #找到後返回該值在list中的位置

1

這是python中基本的查詢方法,雖然簡單,但是,如果由於其時間複雜度為o(n),對於大規模的查詢恐怕是不足以勝任的。二分查詢就是一種替代方法。

二分查詢的物件是:有序陣列。這點特別需要注意。

演算法基本步驟:

1.從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;

2.如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。

3.如果在某一步驟陣列為空,則代表找不到。

這種搜尋演算法每一次比較都使搜尋範圍縮小一半。時間複雜度:o(logn)

下面有兩種實現方法,一種是用遞迴,另一種是是用while迴圈控制。

def binarysearch1(lst,value,low,high):

if high < low:

return -1

mid = (low+high)/2

if lst[mid]>value:

return binarysearch1(lst,value,low,mid-1)

elif lst[mid]

import bisect

def binarysearch3(lst,x):

i = bisect.bisect_left(lst,x)

if i != len(lst) and lst[i] == x:

return i

raise valueerror

if __name__ == '__main__':

lst = sorted([2,5,2,7,3])

print binarysearch3(lst,5)

二分查詢及python實現

首先介紹二分查詢,然後介紹其python實現 返回查詢的次數,這也是很多筆試題會問到的 二分法 也稱二分搜尋 binary search 折半搜尋 half interval search 對數搜尋 logarithmic search 是一種在有序陣列中查詢某一特定元素的搜尋演算法。二分查詢的實現...

Python實現二分查詢

二分查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表...

Python實現二分查詢

二分查詢 每次能夠排除掉一半的資料,查詢的效率非常高,但是侷限性比較大。必須是有序序列才可以使用二分查詢。1.非遞迴演算法 def binary search lis,nun left 0 right len lis 1 while left right 迴圈條件 mid left right 2 ...