一、什么是二分查找
二分查找是一种查找方法,它可以在有序的列表中快速地查找指定的元素。
二、动画演示
三、过程分析
二分查找的过程是,首先取序列数据的中间值mid,将中间值mid与要找的值val作比较,如果两者相等,则查找成功;如果中间值mid < 值val,就将单调序列的前一半舍去,以中间值mid为单调序列起点,重复上述操作;如果中间值mid > 值val,就将单调序列的后一半舍去,以中间值mid为单调序列终点,重复上述操作。
其中会涉及到 left , right 两个变量,中间值mid的取值有这两个值决定。
如果中间值mid < 值val , mid = right -1 ; 中间值mid > 值val , mid = left +1 。
四、代码实现
def binary_search(li, val):
left = 0
right = len(li) - 1
while left <= right: # 因为left的值不可能会大于right的值
mid = (left + right) # 中间值 下标
if li[mid] == val: # 如果刚好等会中间值则直接返回
return mid
elif li[mid] > val:
right = mid -1
else:
left = mid + 1
else:
return -1
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,] # 注意此时列表必须是升序
result = binary_search(testlist, 13)
print(result)