Pythonic版二分查詢實現過程原理解析

2021-10-10 08:25:59 字數 1331 閱讀 4572

更多程式設計教程請到:菜鳥教程

前提:公升序陣列,待查元素在陣列中。

二分查詢:就是乙個遞迴函式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):

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)

第三次思考,去掉return,改為lambda形式:

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 中間元素 為...