Pythonic版二分查詢實現過程原理解析
阿新 • • 發佈:2020-08-13
前提:升序陣列,待查元素在陣列中。
二分查詢:就是一個遞迴函式c。待查元素a,當前陣列中位數b,如果b=a則返回b的索引,b>a則在b左側的子陣列中呼叫函式c,否則在b右側子陣列中呼叫函式c。
第一次思考,按著上面的思路程式設計後的結果:
def binary_search(index,a,value): if a[(len(a) - 1) // 2] == value: return index + (len(a) - 1) // 2 elif a[(len(a) - 1) // 2] < value: return binary_search(index + (len(a) - 1) // 2 + 1,a[(len(a) - 1) // 2 + 1:],value) else: return binary_search(index,a[0:(len(a) - 1) // 2 + 1],value)
第二次思考,簡化中位數計算邏輯:
def binary_search(index,value): if a[len(a) // 2] == value: return index + len(a) // 2 elif a[len(a) // 2] < value: return binary_search(index + len(a) // 2,a[len(a) // 2:],a[0:len(a) // 2],value)
第三次思考,去掉return,改為lambda形式:
binary_search = lambda index,value: index + len(a) // 2 if a[len(a) // 2] == value else binary_search(index + len(a) // 2,value) if a[len(a) // 2] < value else binary_search(index,value)
以上就是二分查詢變為“一行程式碼”版的過程。
執行測試:
if __name__ == '__main__': a = [1,2,33,43,52,66,88,99,111,120] print(f"Target index: {binary_search(0,value=33)}")
結果如下:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。