二分查找是一个基础的算法,也是面试中常考的一个知识点。二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。

使用循环和递归两种方法:
import time
def mytime(func):
def inner(*args, **kwargs):
t1 = time.time()
func(*args, **kwargs)
t2 = time.time()
print('time costed is {}.'.format(t2-t1))
return inner
@mytime
def bin_ser(data, li):
if len(li) > 0:
left = 0
right = len(li) - 1
else:
print('list is too short!')
return
while left < right:
mid = (left + right) // 2
if li[mid] > data:
right = mid
elif li[mid] < data:
left = mid
else:
print('1-the position is {}.'.format(mid))
break
@mytime
def bin_ser2(data, li):
def bin_mid(left, mid, right):
if li[mid] > data:
right = mid
elif li[mid] < data:
left = mid
else:
print('2-the position is {}.'.format(mid))
left = right
mid = (left + right) // 2
if left < right:
return bin_mid(left, mid, right)
left = 0
right = len(li) - 1
mid = (left + right) // 2
bin_mid(left, mid, right)
l = list(range(40, 10000))
bin_ser(42, l)
bin_ser2(42, l)