文章目录
数组中的元素查找
顺序查找
顺序查找
顺序查找思路比较简单,就是遍历,有就返回,所以数组有序无序无所谓,最优时间复杂度为O(1),最坏为O(n)。
# 如果只找到第一个位置
def sequentail_search_first(lis,target):
for ii in range(len(lis)):
if lis[ii]==target:
return ii
return -1
# 想要找到所有的位置
def sequentail_search(lis,target):
pos=[]
for ii in range(len(lis)):
if lis[ii]==target:
pos.append(ii)
if len(pos)==0:
return -1
else:
return pos
分块查找(基于顺序查找改进版本)
先把数组分成k个部分,找每一部分的最大值,记录下每一个模块第一个数的索引,比较目标值与每一个模块最大值的大小,如果比模块最大值小就有可能在当前模块,锁定分组,在分组中执行顺序查找。
# 如果只返回第一个找到的数值
def block_search_first(lis,target,block_len=10):
index_value={
}
for ii in range(len(lis)):
if ii%block_len==0:
index_value[ii]=max(lis[ii:ii+block_len])
for key,value in index_value.items():
if target<=value:
out=sequentail_search_first(lis[key:key+block_len],target)
if out!=-1:
return out
return -1
# 如果要返回所哦有值
def block_search(lis,target,block_len=10):
index_max={
}
for ii in range(len(lis)):