python實現二分查詢

2022-05-21 10:34:43 字數 1273 閱讀 3544

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好  

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

適用條件:

二分查詢是有條件的,首先是有序的,其次因為二分查詢操作的是下標,所以要求是順序

最優時間複雜度:o(1), 最壞時間複雜度:o(logn)

下面我們假設陣列是公升序的情況下寫二分查詢:

def binary_chop(alist, data):

"""非遞迴解決二分查詢

""" n =len(alist)

first = 0

last = n - 1

while first <=last:

mid = (last+first)//

2if alist[mid] >data:

last = mid - 1

elif alist[mid]

first = mid + 1

else

:

return

true

return

false

def binary_chop2(alist, data):

"""遞迴解決二分查詢

""" n =len(alist)

if n < 1

:

return

false

mid = n //

2if alist[mid] >data:

return binary_chop2(alist[0

:mid], data)

elif alist[mid]

return binary_chop2(alist[mid+1

:], data)

else

:

return

true

if __name__ == "

__main__":

lis = [2,4, 5, 12, 14, 23

]

if binary_chop(lis, 12

): print('ok

')else

: print(

'false

')

Python實現二分查詢

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

Python實現二分查詢

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

二分查詢 Python實現

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,...