Python 实现的线性查找

线性查找

线性查找(或顺序查找)是最简单的查找算法。它逐个检查每个元素。

{{ msgDone }} 

{{ index }}

运行上面的模拟,查看线性查找算法的工作原理。

该算法非常简单,易于理解和实现。

工作原理:

  1. 从开头开始,逐个遍历数组中的值。
  2. 将每个值与我们要查找的值进行比较,看是否相等。
  3. 如果找到该值,则返回该值的索引。
  4. 如果遍历到数组末尾仍未找到该值,则返回 -1,表示未找到该值。

如果数组已经排序,最好使用速度更快的二分查找算法,我们将在下一页探讨该算法。

在 Python 中实现线性查找

在 Python 中,检查列表中是否存在某个值的最快方法是使用 in 运算符。

实例

检查列表中是否存在某个值:

mylist = [3, 7, 2, 9, 5, 1, 8, 4, 6]

if 4 in mylist:
  print("Found!")
else:
  print("Not found!")

亲自试一试

但如果需要查找某个值的索引,则需要实现线性查找:

实例

查找列表中某个值的索引:

def linearSearch(arr, targetVal):
  for i in range(len(arr)):
    if arr[i] == targetVal:
      return i
  return -1

mylist = [3, 7, 2, 9, 5, 1, 8, 4, 6]
x = 4

result = linearSearch(mylist, x)

if result != -1:
  print("Found at index", result)
else:
  print("Not found")

亲自试一试

要实现线性查找算法,我们需要:

  1. 包含待查找值的数组。
  2. 要查找的目标值。
  3. 从开头到结尾遍历数组的循环。
  4. if 语句,用于将当前值与目标值进行比较,如果找到目标值,则返回当前索引。
  5. 循环结束后,返回 -1,因为此时我们知道未找到目标值。

线性查找时间复杂度

如果线性查找运行并在包含 \(n\) 个值的数组中,将目标值作为第一个数组值找到,则只需进行一次比较。

但如果线性查找遍历了包含 \(n\) 个值的整个数组,仍未找到目标值,则需要进行 \(n\) 次比较。

这意味着线性查找的时间复杂度为:\( O(n) \)

如果我们绘制线性查找在包含 \(n\) 个值的数组中查找某个值所需的时间图,将得到下图:

时间复杂度