數據結構與算法_二分查找

二分查找只適用於有序的隊列,直接給出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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章