二分查詢演算法的Python實現

2021-10-05 15:37:55 字數 1791 閱讀 2036

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

比如在有序列表:1 3 4 6 7 8 10 13 14中查詢4,操作過程如下圖:

二分查詢有兩種實現,一種是遞迴實現,一種是非遞迴實現。

1、非遞迴實現:

def

binary_search

(alist, item)

: first =

0 last =

len(alist)-1

while first<=last:

midpoint =

(first + last)/2

if alist[midpoint]

== item:

return

true

elif item < alist[midpoint]

: last = midpoint-

1else

: first = midpoint+

1return

false

testlist =[0

,1,2

,8,13

,17,19

,32,42

,]print

(binary_search(testlist,3)

)print

(binary_search(testlist,13)

)

2、遞迴實現

def

binary_search

(alist, item):if

len(alist)==0

:return

false

else

: midpoint =

len(alist)//2

if alist[midpoint]

==item:

return

true

else

:if item

:return binary_search(alist[

:midpoint]

,item)

else

:return binary_search(alist[midpoint+1:

],item)

testlist =[0

,1,2

,8,13

,17,19

,32,42

,]print

(binary_search(testlist,3)

)print

(binary_search(testlist,13)

)

演算法分析二分答案也就是說,將要獲得的答案進行二分查詢,通常這些答案滿足:最大值最小、最小值最大。二分答案有兩個條件:單調、有界。下面放幾道二分查詢的題目(題目來自洛谷,純粹是為了練習二分思想):

木材加工、路標設定、跳石頭

查詢演算法 二分查詢python實現

二分查詢 時間複雜度為o logn 空間複雜度為o 1 二分查詢也叫做折半查詢,是一種在有序陣列中查詢某一特定元素的查詢演算法。查詢過程從中間元素開始。如果中間元素正好是要查詢的元素,則查詢過程結束。def binary search1 arr,value binary search1 尋找與val...

二分查詢演算法python實現

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

python實現二分查詢演算法

二分演算法採用分而治之的思想,演算法思路比較簡單,便直接附上一端 def binarysearch ll,x length len ll height length 1ini 0 while ini height mid ini height 2findx ll mid if findx x ret...