从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。时间复杂度: O(logn)
1、分析思路
例如:在列表 [1,2,3,4,5,6,7,8,9]中,使用二分查找来查找3。
第1步:取最小值1和最大值9的中间值5,来进行比较,发现3<5,所以,就在1和(5-1)之间找。因为已经确定了比5小,所以,就找5的前一位。
image
image
第2步:然后就在1-4之间找,中间值是2。和2进行比较,发现2<3,所以,候选区需要往右移。因为2已经确定了比3小,所以最小值往右移。
image
image
第3步,在3-4之间进行查找,中间值按小的来,就是3,再进行比较。就找到了。
image
2、非递归版的二分查找
from cal_time import *
@cal_time
def bin_search(li, val):
low = 0
high = len(li)-1
w