本例中,顺序查找的时间复杂度为O(n),具体为1000000;二分法查找的时间复杂度为O(log(n)),具体为20,很明显二分法查找要快很多。但是二分法查找要求列表是排序好的,因为排序的时间复杂度与顺序查找相当,所以如果列表没有排序,而且我们只查找一次,则顺序查找更节省时间;如果我们要查找很多次,则二分法查找更节省时间。
cal_time.py代码如下:
import time
def cal_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
print('%s running time:%s secs' % (func.__name__, t2-t1))
return result
return wrapper
search.py代码如下:
from cal_time import *
@cal_time
def linear_search(li, val):
for ind, v in enumerate(li):
if v == val:
return ind
return None
@cal_time
def binary_search(li, val):
left = 0
right = len(li) - 1
while left<=right:
mid = (left+right) // 2
if li[mid] == val:
return mid
elif li[mid] > val:
right = mid - 1
else:
left = mid + 1
return None
li = list(range(1000000))
ind = linear_search(li, 578000)
ind = binary_search(li, 578000)
运行结果:
linear_search running time:0.022967100143432617 secs
binary_search running time:0.0 secs
参考文献:B站教学视频——清华计算机博士带你学习Python算法和数据结构