-
只能作用于有序的顺序表上
-
又折半查找
-
对比序列的中间值,小于该值从左序列中二分查找,大于该值从右序列中二分查找,直到查找到目标值或子序列只有一个元素截止
-
实现
-
递归实现
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)
数据结构笔记:二分查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.