-
只能作用於有序的順序表上
-
又折半查找
-
對比序列的中間值,小於該值從左序列中二分查找,大於該值從右序列中二分查找,直到查找到目標值或子序列只有一個元素截止
-
實現
-
遞歸實現
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)
數據結構筆記:二分查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.