Appearance
题目
下列对顺序存储的有序表(长度为 )实现给定操作的算法中,平均时间复杂度为 的是( )。
错因
A
把"有序表"和""绑在一起,立刻想到二分查找。但二分查找的平均时间复杂度是 ,不是 ;而且题目问"包含指定值"的查找——顺序表里就算有序,要把"哪个位置存了这个值"找出来仍要做比较,无论顺序还是二分,都到不了 。
B
只看到"插入"就想到顺序表插入要移动元素,知道是 ,但读题不细——题目问的是 的操作,B 是 ,恰好是反例。"插入指定值元素"还要先找位置( 或 )再移动后继元素(),整体 。
C
同上。"删除第 个元素"要把第 到第 个元素整体前移一位,平均移动 个元素,是 ,不是 。删第 个不需要找位置(直接下标定位),但移动这一步绕不过去。
总解析
思路:顺序存储的最大优势是随机访问——给定下标 ,直接通过 a[i] = base + (i-1) * size 算出地址,一次访存就拿到值,与 无关。识别四个选项里哪个只用到这个能力即可。
逐项判断:
| 选项 | 操作 | 关键步骤 | 复杂度 |
|---|---|---|---|
| A | 按值查找 | 顺序比较或二分 | 或 |
| B | 按值插入 | 找位置 + 后续元素后移 | |
| C | 按位置删除 | 下标定位()+ 后续元素前移() | |
| D | 按位置取值 | 下标定位 |
D 只做一次地址计算和一次访存,与表长无关;其它三个要么涉及比较(A)要么涉及移动(B、C),都到不了常数级。
最终答案是 D(获取第 个值的算法)。