目的:查找某个数是否存在
二分查找(折半查找):
缺点:要求待查表为有序表(有序的顺序表,不适用于链表),且插入删除困难。
分为递归版本和非递归版本。
#coding: UTF-8
def BinarySearch(list, item):
'''二分查找'''
n = len(list)
if n > 0:
mid = n // 2
if list[mid] == item:
return True
elif item < list[mid]:
return BinarySearch(list[:mid], item)
else:
return BinarySearch(list[mid+1:], item)
return False
def BinarySearch2(list, item):
'''二分查找,非递归'''
n = len(list)
first = 0
last = n - 1
while first < last:
mid = (first + last) // 2
if list[mid] == item:
return True
elif item < list[mid]:
last = mid - 1
else:
first = mid + 1
return False
if __name__ == '__main__':
list = [17, 45, 78, 2, 78]
print(list)
print(BinarySearch2(list, 788))
时间复杂度分析:
最优:O(1)
最坏:O(logn)以2为底。