1. 程式人生 > 其它 >碩盟SM-T54|拓展塢hdmi|高清資料線轉換頭

碩盟SM-T54|拓展塢hdmi|高清資料線轉換頭

二分法查詢

二分查詢又稱折半查詢

  • 優點

    • 比較次數少,查詢速度快,平均效能好
  • 缺點

    • 要求待查表為有序表,且插入刪除困難
  • 查詢思路

    • 首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;
    • 否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。
    • 重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
  • 時間複雜度

    • 最優時間複雜度:O(1)
    • 最壞時間複雜度:O(logn)
  • 二分法查詢實現:

    # coding:utf-8
    def binary_search(alist,item): '''二分法查詢''' first = 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 # 未找到,返回False return False if __name__ == "__main__": alist = [1,2,3,4,5,6] print(binary_search(alist,1)) print(binary_search(alist,6)) print(binary_search(alist,0)) print(binary_search(alist,7))