Python二分法查詢的原理和各種實現方案

2021-10-10 20:41:58 字數 2290 閱讀 7655

"""

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常

變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間

位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找

到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

"""#非遞迴實現,查詢到返回true,找不到返回false

def binary_search1(mlist,item):

first = 0

last = len(mlist) - 1

while first <= last:

middle = (first + last) // 2

if item == mlist[middle]:

return true

elif item < mlist[middle]:

last = middle - 1

else:

first = middle + 1

return false

#遞迴實現,查詢到返回true,找不到返回false

def binary_search2(mlist,item):

if len(mlist)==0:

return false

else:

middle = len(mlist)//2

if item == mlist[middle]:

return true

else:

if item < mlist[middle]:

return binary_search2(mlist[:middle],item)

else:

return binary_search2(mlist[middle+1:],item)

#非遞迴實現,查詢到返回元素索引,如果相同元素有多個(相鄰),則返回哪個索引不固定,找不到返回-1

def binary_search3(mlist,item):

first = 0

last = len(mlist) - 1

while first <= last:

middle = (first + last) // 2

if item == mlist[middle]:

return middle

elif item < mlist[middle]:

last = middle - 1

else:

first = middle + 1

return -1

#遞迴實現,查詢到返回元素索引,如果相同元素有多個(相鄰),則返回哪個索引不固定,找不到返回-1

def binary_search4(mlist,item,first,last):

if first > last:

return -1

else:

middle = (first+last)//2

if item == mlist[middle]:

return middle

else:

if item < mlist[middle]:

return binary_search4(mlist,item,first,middle-1)

else:

return binary_search4(mlist,item,middle+1,last)

if __name__ == '__main__':

my_list = [1, 15,18, 28, 35,44, 50,77, 88, 96, 98]

print(binary_search1(my_list,98))

print(binary_search1(my_list, 70))

print(binary_search2(my_list, 98))

print(binary_search2(my_list, 70))

print(binary_search3(my_list, 88))

print(binary_search3(my_list, 70))

print(binary_search4(my_list, 15,0,len(my_list)))

print(binary_search4(my_list, 70,0,len(my_list)))

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

Python 二分法查詢

二分法演算法原理 陣列是有序陣列,確定該期間的中間位置center 將查詢的值key與array center 比較。若相等,查詢成功返回此位置 否則確定新的查詢區域,繼續二分查詢。新區域的確定 如果key arrey center 則起始位置變為center 1,結束位置不變 如果key 每一次查...

python二分法查詢

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