Python實現二分查詢

2021-08-08 22:59:31 字數 1374 閱讀 1132

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

# 1.以遞迴方式實現:

def binary_search(num, list1, left_index=0):

binary_index = len(list1) // 2

if num < list1[binary_index]:

binary_search(num, list1[0:binary_index], left_index)

elif num > list1[binary_index]:

left_index = left_index + binary_index

binary_search(num, list1[binary_index: len(list1) + 1], left_index)

else:

print(left_index + binary_index)

if __name__ == "__main__":

list1 = [-2, -1, 0, 2, 3, 4, 5, 6]

binary_search(0, list1)

# 2.以迴圈方式實現:

def binary_search(target, list1):

left_index = 0

right_index = len(list1)

while left_index <= right_index:

mid = (left_index + right_index) // 2

if list1[mid] == target:

return mid

elif list1[mid] > target:

right_index = mid - 1

else:

left_index = mid + 1

return -1   # 若沒有找到則返回0

if __name__ == "__main__":

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

target_index = binary_search(5, list1)

print(target_index)

Python實現二分查詢

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

二分查詢 Python實現

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

二分查詢Python實現

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