顺序查找(算法思想):
从待查找数据的第一个元素开始,逐个将每个元素与要查找的数据值进行对比:如果比较到两者值相同,则查找成功,如果一直未找到,则查找失败
def Linear(values, key):
leng = len(values)
for i in range(leng):
if values[i] == key:
return "查找成功:%d" % i
else:
return "查找失败"
values = [8, 9, 6, 5, 7, 2, 3, 1, 4, 10, 13, 12, 11]
print(Linear(values, 7))
二分查找(算法思想):
找出“有序数据”中的中间元素,有中间元素值将原数据分成两个子表,然后根据指定查找值与中间元素的大小关系进行对比:若相对
则查找成功,若大于则在右边进行查找,若小于则在左边进行查找
# 递归法
def twofen_sort(values, key , left, right):
if left > right:
return -1
middle = (left + right) // 2
if key == values[middle]:
return 1
else:
if key > values[left]:
left = middle +1
return twofen_sort(values, key, left, right)
else:
right = middle -1
return twofen_sort(values, key, left, right)
values = [8, 9, 6, 5, 7, 2, 3, 1, 4, 10, 13, 12, 11]
values.sort() # 进行排序
leng = len(values)
result = twofen_sort(values, 7, 0, leng - 1)
if result == 1:
print("查找成功")
else:
print("查找失败")
# 循环法
def binary(values, key):
left = 0
right = len(values) - 1
while left <= right:
middle = (left + right) // 2
if values[middle] == key:
# 成功找到返回下标
return middle
elif values[middle] > key:
# 在左侧查找
right = middle - 1
else:
# 在右侧查找
left = middle + 1
return -1
values = [2, 4, 8, 9, 41, 54, 84, 98]
result = binary(values, 54)
if result == -1:
print("查找失败")
else:
print("查找成功:", result)