
一起动脑筋 · 先看一个小故事
女孩找写着 7 的卡片,顺序是 4、7、2。机器人先看第一张,再看第二张。
把过程摊开来看
- 第 1 张4,不是目标
- 第 2 张7,找到
- 停止本次找任意一个即可
顺序查找逐个检查元素,不要求事先排序。
找到目标就可以按任务要求返回位置;若全部检查完还没有,就报告不存在。
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 张。只有都看过,才能确定目标不在这组卡片里。