數據結構筆記:二分查找

原文地址

分類目錄——數據結構筆記

  • 只能作用於有序順序表

  • 又折半查找

  • 對比序列的中間值,小於該值從左序列中二分查找,大於該值從右序列中二分查找,直到查找到目標值或子序列只有一個元素截止

  • 實現

    • 遞歸實現

      def binarysearch(alist, item):
          '''二分查找_遞歸實現'''
          n = len(alist)
          if n > 0:
              mid = n // 2
              if alist[mid] == item:
                  return True
              elif item < alist[mid]:
                  return binarysearch(alist[:mid], item)
              else:
                  return binarysearch(alist[mid + 1:], item)
          return False
      
    • 非遞歸實現

      def binarysearch(alist, item):
          '''二分查找_非遞歸查找'''
          n = len(alist)
          begin = 0
          end = n - 1
          while begin <= end:
              mid = (begin + end) // 2
              if alist[mid] == item:
                  return True
                  # return mid    # 即所找值的索引
              elif alist[mid] > item:
                  end = mid - 1
              else:
                  begin = mid + 1
          return False
      
    • 測試

      if __name__ == '__main__':
          ll = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
          print(ll)
          print(binarysearch(ll, 6))
      
  • 時間複雜度

    • 最優時間複雜度:O(1)
    • 最壞時間複雜度:O(logn)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章