查找法

线性查找,顺序查找,
缺点,枚举法慢。优点,不需要排序
复杂度O(n)
值循环
for i in a:
if i==x:
print(a.index(x))
break
else:
print(-1)
下标for ...else循环
for i in range(len(a)):
if a[i]==x:
print(i)
break
else:
print(-1)

while...else循环
i=0
while i<len(a):
if a[i]==x:
print(i)
break
i+=1
else:
print(-1)

标志变量f 通用语法
x=18
i=0
f=0
while i<len(a) and f==0:
if a[i]==x:
print(i)
f=1
i+=1
if f==0:
print(-1)
else:
print(i)
二分法查找for...else 或 while...else
不断的缩小范围查找范围内的中间值。
缺点,需要排序。
复杂度O(logn)
l, r = 0, len(a)-1
for i in range(l,r):

while l<=r:

m=(r+l)//2
if x>a[m]:
    l=m+1
elif x<a[m]:
    r=m-1
else:
    print(m)
    break

else:
print(-1)
加标志变量
l, r = 0, len(a)-1
f=0
for i in range(l,r):

while l<=r and f==0:

m=(r+l)//2
if x>a[m]:
    l=m+1
elif x<a[m]:
    r=m-1
else:
    #print(m)
    f=1

if f==0:
print(-1)
else:
print(m)
插序查找
不断的查找目标的插值(估值),在估值以上的值查找需要的值。
缺点,需要排序。
复杂度O(loglogn)
插值比较小
标志变量
l, r = 0, len(a)-1
f=1
for i in range(l,r):

while l <= r and f==1:

m=l+int((r-l)/(a[r]-a[l])*(x-a[l]))
if x>a[m]:
    l=m+1
else:
    print(m)
    f=0

if f==1:
print(-1)
斐波那契查找O(log2n)
分块查找O(log(m) + N/m)
哈希查找O(1)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容