二分查找

递归

1
2
3
4
5
6
7
8
9
10
11
12
def (alist, item):
"""二分查找,递归"""
n = len(alist)
if n > 0:
mid = n//2
if alist[mid] == item:
return True
elif item < alist[mid]:
return binary_search(alist[:mid], item)
else:
return binary_search(alist[mid+1:], item)
return False

非递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def binary_search_2(alist, item):
"""二分查找, 非递归"""
n = len(alist)
first = 0
last = n-1
while first <= last:
mid = (first + last
if alist[mid] == item:
return True
elif item < alist[mid]:
last = mid - 1
else:
first = mid + 1
return False

二分查找的时间复杂度

最优情况:O(1)

最差情况O(logn)