二分查找概念
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列,其最优时间复杂度o(1),最坏时间复杂度o(logn)
递归实现二分查找代码
#二分法查找 每次取得中间值,并判断查找的值是否存在
#递归形式 修改列表
def binary_search(alist,item):
"""二分法查找"""
n = len(alist)
if n >0:
mid = n//2
if alist[mid]==item:
return True
elif alist[mid] > item:
return binary_search(alist[:mid],item)
else:
return binary_search(alist[mid+1:],item)
return False
if __name__ == '__main__':
li = [45,23,44,78,90,18,49,20]
print(binary_search(li,44))
print(binary_search(li,100))
非递归实现二分查找
#二分查找 非递归形式 需要控制起始和终止值
def binary_search(alist,item):
"""二分法查找"""
n = len(alist)
start = 0
end = n-1
while start <= end:
mid = (start+end)//2
if alist[mid]== item:
return True
elif alist[mid]>item:
end = mid-1
else:
start = mid+1
return False
if __name__ == '__main__':
li = [45,23,44,78,90,18,49,20]
print(binary_search(li,44))
print(binary_search(li,100))