顺序查找法
定义与基本思想
顺序查找法(Sequential Search)是一种最简单的查找方法,适用于无序或有序的线性表。其基本思想是:从表的一端开始,逐个将记录的关键字与给定值进行比较,直到找到为止或查找结束。
顺序查找法演示
37195
适用场景
- 适用于数据量较小的线性表
- 适用于无序表或对查找效率要求不高的场合
算法描述
伪代码如下:
for i = 0 to n-1:
if A[i] == x:
return i // 查找成功,返回下标
default:
return -1 // 查找失败
代码实现(带哨兵优化)
在顺序表中设置哨兵(把目标值放在下标 0 处),可以省去每轮循环的下标越界判断,提高效率:
// 顺序查找(哨兵版),元素从下标 1 开始存储
int SeqSearch(int A[], int n, int key) {
A[0] = key; // 哨兵
int i;
for (i = n; A[i] != key; i--); // 从后往前比较,无需判断越界
return i; // i==0 表示查找失败
}
平均查找长度(ASL)推导
设表中每个元素的查找概率相等,均为 。
- 查找成功:比较次数依次为 ,平均比较次数
- 查找失败:需要比较全部 n 个元素后,再比较哨兵,共 次,即
时间复杂度分析
- 最好情况:(第一个元素即为目标)
- 最坏情况:(目标在末尾或不存在)
- 平均情况:
习题
习题 1
给定一个无序数组 ,用顺序查找法查找元素 的位置。
答案与解析
解题思路:逐个比较数组元素,直到找到目标值。
详细步骤:
- 比较 ,不是
- 比较 ,不是
- 比较 ,不是
- 比较 ,找到目标
答案: 在数组下标 处。
习题 2
顺序查找法适合什么样的数据结构?其平均时间复杂度是多少?
答案与解析
解题思路:考查顺序查找的适用场景和复杂度。
详细步骤:
- 顺序查找适用于无序或有序的线性表
- 平均时间复杂度为
答案:适用于线性表,平均时间复杂度为 。
习题 3
在长度为 的顺序表中查找值为 的元素,若查找成功,将该元素与其后继元素交换;若查找失败,将 插入表中。请写出算法并分析平均时间复杂度。
答案与解析
解题思路:顺序查找+交换/插入,分析平均比较次数。
详细步骤:
- 从表头开始顺序查找
- 找到后与后继元素交换
- 未找到则插入表尾
- 平均查找次数 ,失败需 次
- 平均时间复杂度
答案:算法如上,平均时间复杂度为 。
