二分查找的前提是序列必须要排序完成,不能拿无序序列来进行二分法查找。
二分查找的最优时间复杂度为O(1),最坏时间复杂度为O(log n)
二分查找的递归版本
def binary_search(alist,item):
n=len(alist)
if n>0:
mid = n // 2
if alist[mid]==item:
return True #找到返回True
elif item<alist[mid]:
return binary_search(alist[:mid],item)
else:
return binary_search(alist[mid+1:],item)
return False #没有找到返回False
if __name__ == '__main__':
li = [14, 17, 26,31, 44 ,55, 77 , 93]
print(binary_search(li,55))
print(binary_search(li,5))
二分查找的非递归版本
def binary_search(alist,item):
n=len(alist)
first=0
last=n-1
while first<=last:
mid = (first + last) // 2
if alist[mid]==item:
return True
elif item<alist[mid]:
last=mid-1
else:
first=mid+1
return False
if __name__ == '__main__':
li = [14, 17, 26,31, 44 ,55, 77 , 93]
print(binary_search(li,55))
print(binary_search(li,100))