python實現二分查詢

2022-08-17 17:57:17 字數 1293 閱讀 9049

二分法查詢:在一組有序的資料中進行查詢,首先與中間的數先比較,如果查詢的數大於中間的數,則要查詢的數在前半段,否則在後半段,這樣就會排除一半的資料,如此遞迴進行下去,則會極大的提高查詢的速度。下面利用python**實現二分查詢

def

binary_search(array,key):

low =0

high = len(array) - 1

while low mid = int((low + high)/2)

if key high = mid - 1

elif key >array[mid]:

low = mid + 1

else

:

return

mid

return

false

defmain():

array = [1,2,3,4,5,6,7,8,9,10,14,15,17,21,24,28,35,35,37,39]

result = binary_search(array,7)

print

(result)

if__name__ == '

__main__':

main()

排序後會返回所查資料在列表中的索引,如果沒查詢到返回false

面試題:有一遞增數值列表list_a,乙個數值key, 試著寫乙個演算法,找出列表中第乙個大於等於key的數字的下標

import

math

defbinary_search(array, key):

low =0

hight = len(array) - 1

while low print

(low)

mid = math.ceil((low+hight)/2)

if array[mid] print("

<")

low =mid

elif array[mid] >key:

print("

>")

hight =mid

else

:

return

mid

if low + 1 ==hight:

break

return

midarray = [1,2,3,4,6,7]

i = binary_search(array, 5)

print(i)

注:math.ceil()是向上取整

Python實現二分查詢

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

Python實現二分查詢

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

二分查詢 Python實現

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