列表查找(从列表中找到指定元素)分为顺序查找和二分查找
内置列表查找函数:index()
顺序查找:
顾名思义从第一个元素开始找,直到找到指定元素。
代码:
def linear_search(li,val):#li是一个列表,val指定元素
for ind,v in enumerate(li):
if v == val :
return ind #返回对应下标
else:
return None
时间复杂度为O(n)
二分查找:也叫折半查找,从有序列表的初始候选区li[0:n]开始,通过对待查找的值与候选区中间值进行比较,可以使候选区减小一半.
如上图如果想查找列表是否有3:首先让left=0(li的第一个元素的下标)right=len(li)-1(li最后一个元素的下标)中间值mid=(left+right)//2,
代码:
def biary_search(li,val):
left = 0
right = len(li)-1
while left <= right:#候选区有值
mid = (left + right)//2
if li[mid] > val:#待查找的值在mid左侧
right = mid -1
else: #待查找的值在mid右侧
left = mid +1
else:
return None
时间复杂度为O(logn)
如果待查找的列表为有序的直接用二分查找、如果是无序的,观察如果需要顺序查找的元素很多,则考虑将列表排序后用二分查找,如果不需要顺序查找很多元素就直接用顺序查找。
内置函数index()本质就是顺序查找