顺序查找
从待查找数据的第一个元素开始,逐个将每个元素与要查找的数据值进行对比,如果比较到两者相同,则查找成功;如果一直到最后都未找到,则查找失败。
# 顺序查找
# 待查找数据集合 value
# 查找的值 key
def linear(value,key):
for i in range(len(value)):
if value[i] == key:
# 成功,返回下标值
return i
# 失败,返回-1
return -1
values = [9,1,11,3,2,6,7,5,8,13,4,10,12]
# 查找 7
result = linear(values,7)
if result == -1:
print('查找失败')
else:
print('查找成功,对应下标为',result)
---------- 运行 ----------
查找成功,对应下标为 6
二分查找
找出“有序数据”中的中间元素,有中间元素值将元数据分为两个字表,然后根据指定查找值与中间元素的大小关系进行比对,若相对,则查找成功,若查找值小于中间元素,则在左侧子表中继续查找;若查找值大于中间元素,则在右侧子表中继续查找。如此递归查找下去,直接查找成功或查找完整个数据集合为止(折半查找)
# 二分查找
# 待查找数据集合 - 》 value
# 要查找的数值 - 》key
# 限定查找范围的左侧元素下标值 - left
# 限定查找范围的右侧元素下标值 - right
def binary(value,key,left,right):
if left > right:
# 查找失败
return -1
middle = (left+right)//2
if value[middle] < key:
left = middle + 1
return binary(value,key,left,right)
elif value[middle] > key:
right = middle - 1
return binary(value,key,left,right)
else:
return middle
values = [3,9,10,12,25,34,45,56,67,76,84,99]
result = binary(values,25,0,len(values)-1)
if result == -1:
print('查找失败')
else:
print('查找成功,对应下标为',result)
---------- 运行 ----------
查找成功,对应下标为 6