1. 程式人生 > 程式設計 >Pythonic版二分查詢實現過程原理解析

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

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

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

結果如下:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。