顺序查找(Sequential Search),又称线性查找,是查找技术中最基本、最简单的一种。它的基本思想是从查找表的一端开始,逐个检查每个数据元素的关键字,直到找到所需的数据元素或检查完所有元素为止。顺序查找对查找表的存储结构没有特殊要求,既适用于顺序存储结构,也适用于链式存储结构。
顺序查找的算法步骤
1、初始化:
设置两个指针(或索引),一个指向查找表的起始位置,记为i = 0(或i = 1,取决于查找表的索引是从0开始还是从1开始),另一个用于记录查找是否成功,初始时设为found = false。
2、遍历查找表:
从i开始,逐个检查每个数据元素的关键字,即比较key[i]与给定值K是否相等。
如果相等,则说明找到了所需的数据元素,将found设为true,并记录下当前位置(或数据元素本身),然后结束查找。
如果不相等,则继续向后检查下一个数据元素,即将i加1。
3、查找结束:
当遍历完整个查找表后(即i等于查找表的长度时),如果仍未找到满足条件的数据元素,则查找失败,found保持为false。
顺序查找的Python示例代码
def sequential_search(arr, target):
"""
顺序查找算法
:param arr: 查找表,一个列表
:param target: 要查找的目标值
:return: 目标值在列表中的索引,如果未找到则返回-1
"""
for i in range(len(arr)):
if arr[i] == target:
return i # 找到目标值,返回索引
return -1 # 未找到目标值,返回-1
# 示例
arr = [10, 22, 8, 3, 68, 103, 18, 55]
target = 18
index = sequential_search(arr, target)
if index != -1:
print(f"元素{target}在数组中的索引为:{index}")
else:
print(f"元素{target}在数组中未找到")
顺序查找的性能分析
时间复杂度:在最坏情况下,即目标值不在查找表中或位于查找表的最后一个位置时,需要遍历整个查找表,因此时间复杂度为O(n),其中n是查找表的长度。
空间复杂度:顺序查找算法只需要几个额外的变量来存储索引和查找结果,因此空间复杂度为O(1)。