二分查找只適用於有序的隊列,直接給出python代碼
非遞歸
# 返回查找到的下標,沒有找到返回None
def bin_search(arr, val):
low = 0; high = len(arr) -1
while low <= high:
mid = (low+high) // 2
if arr[mid] == val:
return mid
elif arr[mid] > val:
high = mid -1
else:
low = mid + 1
return None
測試
In [32]: print bin_search([0, 1, 2, 8, 13, 17, 19, 32, 42,], 3)
None
In [33]: print bin_search([0, 1, 2, 8, 13, 17, 19, 32, 42,], 13)
4
遞歸
def bin_search(arr, start, end, val):
mid = (end - start)//2 + start
if arr[mid] == val:
return mid
if start >= end:
return None
elif arr[mid] > val:
return bin_search(arr, start, mid - 1, val)
elif arr[mid] < val:
return bin_search(arr, mid + 1, end , val)
return None
測試
In [9]: print bin_search(arr, 0, len(arr)-1, 13)
4