Python查找-二分查找
二分查找
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。
它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右 半部继续搜索x。
二分查找非递归方式
def binarySearch(sourceList,key):
high = len(sourceList)
low = 1
while low <= high:
mid = int((low + high)/2)
if key < sourceList[mid]:
high = mid - 1
elif key > sourceList[mid]:
low = mid + 1
else:
return mid
return 0
if __name__ == "__main__":
sourceList = [0,2,5,7,10,12,13,14,17,18]
index = binarySearch(sourceList,14)
print(index)
程序输出结果
7
二分查找递归方式
def binarySearch_1(sourceList,key,low,high):
if low <= high:
mid = int((low + high) / 2)
print(mid)
if sourceList[mid] < key:
low = mid + 1
return binarySearch_1(sourceList,key,low,high)
if sourceList[mid] > key:
high = mid + 1
return binarySearch_1(sourceList,key,low,high)
elif sourceList[mid] == key:
return mid
return 0
if __name__ == "__main__":
sourceList = [0,2,5,7,10,12,13,14,17,18]
index = binarySearch_1(sourceList,14,1,len(sourceList))
print(index)
程序输出结果
7