python實現二分查找


  二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好  

  二分查找即搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果中間元素大於或小於要查找元素,則在小於或大於中間元素的那一半進行搜索,而且跟開始一樣從中間元素開始比較. 如果在某一步驟數組為空,則代表找不到.這種算法每一次比較都會使搜索范圍縮小一半.

  適用條件:

    二分查找是有條件的,首先是有序的,其次因為二分查找操作的是下標,所以要求是順序

    最優時間復雜度:O(1), 最壞時間復雜度:O(logn)

下面我們假設數組是升序的情況下寫二分查找:

def binary_chop(alist, data):
    """
    非遞歸解決二分查找
    """
    n = len(alist)
    first = 0
    last = n - 1
    while first <= last:
        mid = (last+first)//2
        if alist[mid] > data:
            last = mid - 1
        elif alist[mid] < data:
            first = mid + 1
        else:
            return True
    return False

def binary_chop2(alist, data):
    """
    遞歸解決二分查找
    """
    n = len(alist)
    if n < 1:
        return False
    mid = n // 2
    if alist[mid] > data:
        return binary_chop2(alist[0:mid], data)
    elif alist[mid] < data:
        return binary_chop2(alist[mid+1:], data)
    else:
        return True

if __name__ == "__main__":
    lis = [2,4, 5, 12, 14, 23]
    if binary_chop(lis, 12):
        print('ok')
    else:
        print('false')

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM