Python实现顺序,二分和哈希查找算法
顺序查找
顺序查找(线性查找)是一种最基本的查找算法。它逐个检查列表中的每个元素,直到找到目标元素或检查完整个列表。
算法步骤:
- 从列表的第一个元素开始,依次检查每个元素。
- 如果找到目标元素,返回其索引。
- 如果检查完整个列表仍未找到目标元素,返回-1。
Python实现顺序查找
def sequential_search(lst, target):
for index, element in enumerate(lst):
if element == target:
return index
return -1
# 示例
lst = [3, 5, 2, 7, 9, 1]
target = 7
result = sequential_search(lst, target)
print("目标元素的索引:", result)
二分查找
二分查找适用于有序列表。它通过反复将查找范围缩小一半,快速定位目标元素。
算法步骤:
- 设定初始查找范围为整个列表。
- 计算查找范围的中间索引。
- 比较中间元素与目标元素:
- 如果相等,返回中间索引。
- 如果目标元素小于中间元素,缩小查找范围到左半部分。
- 如果目标元素大于中间元素,缩小查找范围到右半部分。
- 重复步骤2-3,直到找到目标元素或查找范围为空。
Python实现二分查找
def binary_search(lst, target):
left, right = 0, len(lst) - 1
while left <= right:
mid = (left + right) // 2
if lst[mid] == target:
return mid
elif lst[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
# 示例(列表必须是有序的)
lst = [1, 2, 3, 5, 7, 9]
target = 7
result = binary_search(lst, target)
print("目标元素的索引:", result)
哈希查找
哈希查找通过使用哈希表(字典)将查找时间复杂度降为常数时间。它将元素存储在一个哈希表中,使用键值对来实现快速查找。
算法步骤:
- 创建一个哈希表,将列表中的每个元素插入表中。
- 直接使用目标元素作为键在哈希表中查找其对应的值。
Python实现哈希查找
def hash_search(lst, target):
hash_table = {element: index for index, element in enumerate(lst)}
return hash_table.get(target, -1)
# 示例
lst = [3, 5, 2, 7, 9, 1]
target = 7
result = hash_search(lst, target)
print("目标元素的索引:", result)
这三种查找算法适用于不同的情况:
- 顺序查找适用于小规模且无序的列表。
- 二分查找适用于有序列表,查找效率高。
- 哈希查找适用于需要快速查找的场景,但需要额外的存储空间来维护哈希表。