二分查找只适用于有序的队列,直接给出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