顺序查找和二分查找
顺序查找
对于任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。
python代码实现
def sequence(li, val):
for index, v in enumerate(li):
if val == v:
return index
else:
return None
print(sequence([1, 2, 3, 4], 5))
二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列
(也就是查找的列表必须是有序的数字)
我们用left和right 分别代表列表的最左边和最右边的索引
mid 表示他们的中间的索引
我们每次找都是根据中间值去比较 然后缩小范围查找 所以只有当left >right 时代表列表已经无法找到我们需要的值了,此时应该结束循环
当列表的中间值小于我们需要查找的值时,我们需要将left移向mid的下一个索引值
当列表的中间值大于我们需要查找的值时,我们需要将right移向mid的上一个索引值
def binary(li, val):
left = 0
right = len(li) - 1
while left <= right:
mid = (left + right) // 2
if li[mid] == val:
return mid
elif li[mid] < val:
left = mid + 1
else:
right = mid - 1
else:
return None
print(binary([1, 2, 3, 4], 3))