算法与数据结构3之查找
1.顺序查找(Linear Search)
顺序查找:也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止。
def linear_search(li,val): # 一个列表 一个待查找元素
for ind,v in enumerate(li):
if v == val:
return ind
else:
return None
2.二分查找(列表有序)
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: # 待查找的值在mid左侧
right = mid - 1
else: # li(mid) < val 待查找的值在mid右侧
left = mid + 1
else:
return None
li = [1,2,3,4,5,6,7,8,9]
print(binary_search(li,3))
'''
时间复杂度O(logn)
'''
3.顺序查找与二分查找的比较
# cal_time.py文件代码
import time
def cal_time(func):
def wrapper(*args,**kwargs):
t1 = time.time()
res = func(*args,**kwargs)
t2 = time.time()
print("%s runing time:%s secs."%(func.__name__,t2 - t1))
return res
return wrapper
############### 比较 ########################
from cal_time import * @cal_time def linear_search(li,val): # 一个列表 一个待查找元素 for ind,v in enumerate(li): if v == val: return ind else: 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: # 待查找的值在mid左侧 right = mid - 1 else: # li(mid) < val 待查找的值在mid右侧 left = mid + 1 else: return None li = list(range(100000000)) linear_search(li,38900000) binary_search(li,38900000)