更多程式設計教程請到:菜鳥教程
前提:公升序陣列,待查元素在陣列中。
二分查詢:就是乙個遞迴函式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, a, value):第三次思考,去掉return,改為lambda形式: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:], value)
else:
return binary_search(index, a[0:len(a) // 2], value)
binary_search = lambda index,a,value: index + len(a) // 2 if a[len(a) // 2] == value else binary_search(index + len(a) // 2, a[len(a) // 2:], value) if a[len(a) // 2] < value else binary_search(index, a[0:len(a) // 2], value)以上就是二分查詢變為「一行**」版的過程。
執行測試:
if __name__ == '__main__':
a = [1, 2, 33, 43, 52, 66, 88, 99, 111, 120]
print(f"target index: ")
結果如下: Pythonic版二分查詢
本文出自天外歸雲的 前提 公升序陣列,待查元素在陣列中。二分查詢 就是乙個遞迴函式c。待查元素a,當前陣列中位數b,如果b a則返回b的索引,b a則在b左側的子陣列中呼叫函式c,否則在b右側子陣列中呼叫函式c。第一次思考,按著上面的思路程式設計後的結果 def binary search inde...
OC版二分查詢
二分查詢 也稱折半查詢 是很常見的一種在陣列中查詢資料的演算法,作為一名程式設計師是應該必須會的。它的基礎思想 獲取陣列的中間值,將陣列分割成兩份,利用中間值跟指定的值進行比較,如果中間值大於指定的值,就在陣列的左邊進行查詢 如果中間值小於指定值,就在陣列的右邊進行查詢。如此迴圈的執行下去,最終找到...
python版二分搜尋演算法
先用圖展示一下二分搜尋演算法的原理 二分搜尋演算法又稱為折半搜尋,下面 實現的是輸出要搜尋資料在陣列中的位置和查詢的次數 演算法的步驟 給乙個帶有n個值的陣列,陣列a是從小到大的排列 需要查詢t值在陣列的中的位置 1 先令l為0,r為n 1 2 如果存在l r,則不需進行搜尋 3 令m 中間元素 為...