python查找算法
查找算法
顺序查找
def linear_search(li, val):
for i, idx in enumerate(li):
if i == val:
return idx
return None
时间复杂度:O(n)
二分查找
def binary_search1(lis, val):
left = 0
right = len(li) - 1
while left < right:
mid = (left + right) // 2
if val == li[mid]:
return mid
elif val > li[mid]:
left = mid + 1
elif val < li[mid]:
right = mid - 1
else:
return None
# 递归查找
def binary_search2(lis, val):
l = 0
r = len(lis) - 1
mid = (l + r) // 2
print(val, mid, lis[mid], lis[-1], lis[0])
if val == lis[mid]:
return True
elif val > lis[mid]:
return binary_search2(lis[mid + 1:], val)
else:
return binary_search2(lis[:mid], val)