查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程
列表查找(线性表查找):从列表中查找指定元素
输入:列表、待查找元素
输出:元素下标(未找到返回0/-1)
内置列表查找函数:index() 该函数是顺序查找
计算运行时间装饰器
使用time库来创建,调用时调用from cal_time import *
然后在自己写的函数上写上装饰器@cal_time
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
顺序查找
顺序查找:也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止
时间复杂度:O(n)
from cal_time import *
@cal_time
def linear_search(data_set, value):
result = None
for ind, v in enumerate(data_set): # 同时遍历下标和内容
if v == value:
result = ind
return result
a = list(range(10000000))
print(linear_search(a, 678899))
二分查找
二分查找:又叫折半查找,从“有序”列表的初始候选区li[0:n]开始,通过对查找的值与候选区中间值的比较,可以使候选区减少一半
三个变量:left(候选区左边)、right(候选区右边)、mid(候选区右边)
时间复杂度:O(logn)
因为必须有序才可以查找,所以之后会学习排序算法
from cal_time import *
@cal_time
def binary_search(data_set, value):
left = 0
right = len(data_set) - 1
while left <= right: # 候选区有值
mid = (left + right) // 2
if data_set[mid] == value:
return mid
elif data_set[mid] > value: # 待查找的值在mid左侧
right = mid - 1
else: # 待查找的值在mid右侧
left = mid + 1
return -1
li = list(range(1000000))
print(binary_search(li, 934211))
代码自己手动敲一遍理解更深哦!