python數據結構-二分查找

二分查找


        有序列表對於我們的比較是很有用的。在順序查找中,當我們與第一個項進行比較時,如果第一個項不是我們要查找的,則最多還有 n-1 個項目。 二分查找從中間項開始,而不是按順序查找列表。 如果該項是我們正在尋找的項,我們就完成了查找。 如果它不是,我們可以使用列表的有序性質來消除剩餘項的一半。如果我們正在查找的項大於中間項,就可以消除中間項以及比中間項小的一半元素。如果該項在列表中,肯定在大的那半部分。然後我們可以用大的半部分重複這個過程。從中間項開始,將其與我們正在尋找的內容進行比較。再次,我們找到元素或將列表分成兩半,消除可能的搜索空間的另一部分。下圖展示了該算法如何快速找到值 54 。完整的函數見CodeLens 3中。


建立一個binarySearch.py文件

# 二分法查找
def binarySearch(alist, item):
    first = 0
    last = len(alist)-1
    found = False
    while first <= last and not found:
        midpoint = int((first + last) / 2)
        if alist[midpoint] == item:
            found = True
        else:
            if item < alist[midpoint]:
                last = midpoint - 1
            else:
                first = midpoint + 1
    return found


testlist = [0, 1, 2, 8, 13, 17, 32, 42]
print(binarySearch(testlist,3))
print(binarySearch(testlist,13))

遞歸調用二分查找函數

# 遞歸調用二分查找
def binarySearch(alist, item):
    if len(alist) == 0:
        return False

    else:
        midpoint = (len(alist) - 1) // 2
        if alist[midpoint] == item:
            return True
        else:
            if item < alist[midpoint]:
                return binarySearch(alist[:midpoint], item)
            else:
                return binarySearch(alist[midpoint + 1:], item)


testlist = [0, 1, 2, 8, 13, 17, 19, 32, 54]
print(binarySearch(testlist, 3))
print(binarySearch(testlist, 13))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章