在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。 从维基百科对于二分搜索的描述中可以发现: ①二分搜索的基础是必须是有序数组,并且是可比较的 ②假设数组为升序,选取中间元素与需要查找元素比较大小。如果当前元素与选取元素相等,则查找结束;如果当前元素比选取元素大,则选取当前元素的右侧元素,反之选取当前元素左侧元素。 ③重复步骤②直至查找指定元素或剩余元素数量为零 编程中我们需要注意两个问题: ①当数据数量为偶数时,如何选取中间值
②当有相同数据时如何处理 代码实现:
array = [1, 2, 3, 4, 5, 6, 7]
def binarySearch(array, value):
low = 0
high = len(array)-1
while low <= high:
midd = (low+high)//2 # 取整 防止结果是小数
if value == array[midd]:
return array[midd] # 选中结果 跳出循环
elif value > array[midd]:
low = midd+1 #大于当前值 选取右侧剩余数据
else:
high = midd-1 #小于当前值 选取左侧剩余数据
return None
print('result:' + str(binarySearch(array, 3)))