二分查找
- 时间复杂度:O(logn)
- 在一个区间[l,h]中查找,起初l=0,h=n-1.然后用区间的中间值m=[(l+h)/2]来测试函数f。根据前面的计算结果,查找空间缩小为[l,m]或[m+1,h]。注意,在计算m的时候向下取整,这样,第二个区间就永远不会为空,第一个也是。在[log2(n)]次迭代后,即查找区间缩小为单元素的时候,查找结束。
- 查找次数log2(n)
-
def binary_search(list, item): low = 0 high = len(list) - 1 while low <= high: #判断是否缩到一个元素 mid = (low + high) /2 guess = list[mid] if guess == item: #查到要的元素 return mid elif guess > item: high = mid - 1 else: low = mid + 1 return None