顺序查找和二分查找的对比
- 顺序查找时间复杂度为n,二分查找时间复杂度为logn
- 二分查找要求列表已经有序,顺序查找则对列表是否有序没有要求
顺序查找和二分查找耗时比较
import time
def cal_time(func):
def wrapper(*args,**kwargs):
t1=time.time()
result=func(*args,**kwargs)
t2=time.time()
print(f"{func.__name__} 耗时 {t2-t1} 秒")
return result
return wrapper
@cal_time
def binary_search(li,value):
left=0
right=len(li)-1
while left<=right:
mid=(left+right)//2
if li[mid]==value:
return mid
elif li[mid]<value:
left=mid+1
else:
right=mid-1
return None
@cal_time
def linear_search(li,value):
for index,val in enumerate(li):
if val==value:
return index
return None
if __name__=="__main__":
li=list(range(100000000))
index1=linear_search(li,59859000)
index2=binary_search(li,598659000)
执行结果如下:
linear_search 耗时 3.679860830307007 秒
binary_search 耗时 0.0 秒
可以看出,当列表长度非常大时,二分查找速度非常快
顺序查找和二分查找的选择
- 当列表已经有序了,则可以选择使用二分查找
- 当列表无序时,如果只查找一次,则可以直接使用顺序查找,如果需要查抄多次,则可以首先将列表排序,然后再使用二分查找法查找
- 此外,python中index方法使用的就是顺序查找