1.顺序查找
也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止。
图1
def linear_search(li,val):
for ind,v in enumerate(li):
if v==val:
return ind
else:
return None
2.二分查找
又叫折半查找,从有序列表的初始候选去li【0:n】开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。 切记索引需要整除,即地板除,是要向下取整的
二分查找的效率比线性查找的效率要高
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
elif li[mid]<val:#带查找的值在mid右侧
left = mid+1
else:
return None
li=[1,2,3,4,5,6,7,8,9,10,11]
binary_search(li,8)
3. index()函数一定是顺序查找,因为给定的数列不一定有序