二分法查詢:在一組有序的資料中進行查詢,首先與中間的數先比較,如果查詢的數大於中間的數,則要查詢的數在前半段,否則在後半段,這樣就會排除一半的資料,如此遞迴進行下去,則會極大的提高查詢的速度。下面利用python**實現二分查詢
defbinary_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)
(result)
if__name__ == '
__main__':
main()
排序後會返回所查資料在列表中的索引,如果沒查詢到返回false
面試題:有一遞增數值列表list_a,乙個數值key, 試著寫乙個演算法,找出列表中第乙個大於等於key的數字的下標
importmath
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 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,...