二分法查找(只适用于有序的顺序表)
def binary_search(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
def binary_search_2(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
时间复杂度
- 最优时间复杂度:O(1)
- 最坏时间复杂度:O(log2n)