python--二分法查找


二分法查找又稱折半查找。二分法查找是在一個有序列表的基礎上完成的,要查找的值x和列表的中間值m作比較,如果x大於m,那么接下來從m+1的右區間內再以相同方法取中間值做判斷,循環往復此過程,直到判斷出x=m的時候就是查找成功。否則相反。返回類型為布爾值

時間復雜度為 O(logn) 空間復雜度:O(1)

兩種實現二分法查找的方法:遞歸、非遞歸    代碼奉上

# 遞歸實現:                                                       
def binary_seach(alist,item):
    if len(alist) == 0:
        return False
    else:
        mid = len(alist) // 2   # middle 記錄中間位置索引
        if item == alist[mid]:  # 如果查找元素與中間位置元素相等 則返回真
            return True
        elif item < alist[mid]:  # 如果查找元素小於中間位置元素,則進行列表切片縮小列表范圍
            return binary_seach(alist[:mid],item)
        else:
            return binary_seach(alist[mid+1:],item)
if __name__ == '__main__':
    alist = [5, 10, 15, 18, 35, 55, 65, 75, 99]
    print(binary_seach(alist,200))   # 查找列表中不存在的數據
    print("__________________")
    print(binary_seach(alist,15))     # 查找列表中存在的數據

 

#非遞歸實現:                                                                                                                   
def binary_seach(alist,item):
    first = 0                                # 起始下標為0 
    last = len(alist) - 1                    # 列表最后一位的索引
    while first <= last:                     # 列表中間位置的索引值
        mid = (first + last) // 2
        if item == alist[mid]:
            return True
        elif item < alist[mid]:
            last = mid -1
        else:
            first = mid + 1
    else:
        return False
if __name__ == '__main__':
    alist = [5,10,15,18,35,55,65,75,99]  # 有序序列
    print(binary_seach(alist, 200))

 


免責聲明!

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



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