python實現二分查詢(無bug)

2021-09-23 17:25:11 字數 2072 閱讀 4713

二分查詢的優點:比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難

學習之前,在網上找了一些教程,測試過程中,總會有兼顧不到的地方,所以在此總結了一下,解決了大部分的漏洞。

如果還有什麼問題,歡迎各位指正,**如下

def sort_list(my_list):

# 首先將列表排序,這裡用的是冒泡

for j in range(len(list_data)):

for i in range(len(list_data) - j - 1):

if list_data[i] > list_data[i + 1]:

list_data[i], list_data[i + 1] = list_data[i + 1], list_data[i]

return list_data

遞迴方式

def binary_search1(my_list, num):

# 遞迴

middle_index = len(my_list) // 2 # 算出中間索引

if middle_index == 1: # 如果剩下列表兩個元素, 就不必遞迴了,直接判斷

if num == my_list[0] or num == my_list[1]:

return true

else:

return false

if middle_index == 0: # 如果列表只有乙個元素

if num == my_list[middle_index]:

return true

else:

return false

# 如果這個數字大於中間索引的數字, 使用切片遞迴查詢

if num > my_list[middle_index]:

return binary_search1(my_list[middle_index:], num)

# 如果這個數字小於中間索引的數字, 使用切片遞迴查詢

elif num < my_list[middle_index]:

return binary_search1(my_list[:middle_index + 1], num)

# 如果這個數字等於中間索引的數字,返回true

elif num == my_list[middle_index]:

return true

非遞迴方式

def binary_search2(my_list, num):

# 非遞迴

start = 0 # 開始位置索引

end = len(my_list) - 1 # 結束位置索引

while start <= end:

# 這個判斷是為了防止找不到元素而無限迴圈

if end - start == 1:

if num == my_list[start] or num == my_list[end]:

return true

else:

return false

middle_index = (start + end) // 2

if num == my_list[middle_index]:

return true

elif num > my_list[middle_index]:

start = middle_index

else:

end = middle_index

return false

if __name__ == '__main__':

list_data = [2, 5, 1, 6, 4, 4, 8, 7]

my_list = sort_list(list_data)

print(binary_search1(my_list, 1))

print(binary_search2(my_list, 9))

列印結果如下

true

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