Appearance
题目
为实现快速排序算法,待排序序列宜采用的存储方式是()
错因
B
把"快速排序"和"哈希查找快"做了错误联想。散列存储是为查找优化的(O(1) 期望命中),但元素散布无序、不存在"按下标分区"的概念——快排的 partition 操作根本无法在散列表上落地。
C
忘了快排的核心是"按下标随机访问 + 原地交换"。链表只支持顺序遍历,没有 O(1) 随机访问;low、high 指针往中间走的每一步都要 O(n) 扫到位,partition 直接退化到 O(n²)。
D
把"高效访问"和"索引存储"画等号。索引存储(如索引顺序文件)是为按索引项快速查找设计的,原地交换数据成本高、还要同步维护索引——快排在这种结构上慢一个数量级。
总解析
快排的核心是 partition——以枢轴为界,把数组分成两半。这一步需要:
- 按下标随机访问元素(low、high 指针从两端往中间走,每步 O(1))
- 原地交换元素(swap 操作 O(1))
只有顺序存储(数组)能在 O(1) 时间内同时满足这两点:
| 存储方式 | 随机访问 | 原地交换 | 适合快排? |
|---|---|---|---|
| 顺序存储 | O(1) | O(1) | ✓ |
| 链式存储 | O(n) | 改指针 O(1),但定位 O(n) | ✗ 整体退化 |
| 散列存储 | 无序,无下标概念 | — | ✗ |
| 索引存储 | 经过索引项 | 需同步维护索引 | ✗ |
最终答案是 A。