女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

女孩找写着 7 的卡片,顺序是 4、7、2。机器人先看第一张,再看第二张。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 第 1 张4,不是目标
  2. 第 2 张7,找到
  3. 停止本次找任意一个即可

顺序查找逐个检查元素,不要求事先排序。

找到目标就可以按任务要求返回位置;若全部检查完还没有,就报告不存在。

01什么是顺序查找?

假设有数组:

int a[5] = {7, 3, 9, 2, 6};

要找数字 9,可以从第一个元素开始逐个比较。

7 ✗3 ✗9 ✓

02代码怎样写?

int pos = -1;

for (int i = 0; i < n; i++) {
    if (a[i] == target) {
        pos = i;
        break;
    }
}

-1 可以表示“还没有找到”。

03找到后为什么可以 break?

如果题目只要求找到任意一个目标位置,找到后就没有必要继续检查。

但如果要统计目标出现了几次,就不能在第一次找到后直接结束。

04数据必须有序吗?

不需要。顺序查找可以用于无序数据。

05最坏要检查多少次?

如果目标在最后一个位置,或者根本不存在,长度为 n 的序列要检查 n 个元素。

最坏工作量和 n 成正比 → O(n)

06顺序查找是不是很差?

不是。数据量小、只查一次、数据没有排序时,顺序查找往往最简单直接。

你已经知道了什么

  • 顺序查找从头到尾逐个比较。
  • 它不要求数据有序。
  • 找到后是否停止取决于题目需求。
  • 最坏情况下检查 n 个元素,属于 O(n)。
  • 简单算法在小规模任务中可能就是合适选择。

下一篇:二分查找:每次排除一半

轮到你来试一试

在 4、7、2 中查找 9,需要看几张?

想好了吗?点开看解释

3 张。只有都看过,才能确定目标不在这组卡片里。