python實現二分法查詢

2021-08-19 18:33:39 字數 1822 閱讀 8790

搜尋是在乙個專案集合中找到乙個特定專案的演算法過程。搜尋通常的答案是真的或假的,因為該專案是否存在。 搜尋的幾種常見方法:順序查詢、二分法查詢、二叉樹查詢、雜湊查詢

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

'''二分法查詢,遞迴實現'''

n = len(alist)

# 如果列表為空就說明沒有找到item

if n == 0:

return false

else:

# 中間位置

mid = n // 2

# 與中間值相等,直接返回真

if alist[mid] == item:

return true

# 如果小於中間值,切片取前半段進行遞迴

elif item < alist[mid]:

return binarysearchre(alist[: mid], item)

# 如果大於中間值,切片取後半段進行遞迴

else:

return binarysearchre(alist[mid + 1:], item)

def binarysearch(alist, item):

'''二分法查詢,用非遞迴的常規方法實現'''

n = len(alist)

# 所查詢序列的起始游標和終止游標

start, end = 0, n-1

# 所查詢的序列不為空

while start <= end:

# 取中間游標

mid = (end + start) // 2

if alist[mid] == item:

return true

# 如果小於中間值,就在原有列表的mid游標前半段查詢

elif item < alist[mid]:

end = mid - 1

else:

start = mid + 1

return false

if __name__ == '__main__':

alist = [12, 21, 24, 32, 39, 43, 67, 90]

# print(binarysearchre(alist, 43))

# print(binarysearchre(alist, 100))

print(binarysearch(alist, 43))

print(binarysearch(alist, 100))

執行結果:

/home/longhui/desktop/資料結構與演算法/venv/bin/python /home/longhui/desktop/資料結構與演算法/venv/mycode/6_sorting_and_searching/binary_search.py

true

false

process finished with exit code 0

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二分法查詢

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