Skip to content

2017年 408 数据结构 第 10 题

数据结构2017年选择题2分

题目

在内部排序时,若选择了归并排序而没有选择插入排序,则可能的理由是( )。

① 归并排序的程序代码更短

② 归并排序的占用空间更少

③ 归并排序的运行效率更高

错因

A

把"归并排序原地完成"当默认。事实上归并排序需要 O(n) 的辅助数组来合并两个有序段,是典型的**"以空间换时间"算法;而插入排序是真正的原地排序**,只需 O(1) 额外空间。② 的方向被搞反了。

C

把 ① 也当对——"归并听起来更结构化、代码更优雅"。但代码量上:插入排序两层循环 + 一个移动赋值,10 行就写完;归并排序需要"递归拆分 + 合并子过程",代码明显更长。① 错;再叠加 A 的 ② 错,整条选项不成立。

D

判对了 ③(归并 O(n log n) 比插入 O(n²) 更快),但同样误判 ① 为对——"归并代码看起来比插入更整洁所以更短",是直觉而不是事实。一旦动笔写一遍两个算法就会发现归并代码更长。

总解析

逐条比对两个算法的关键指标

指标插入排序归并排序优胜方
代码量短(双层循环 + 移动赋值)(递归 + 合并函数)插入
辅助空间O(1)(原地)O(n)(辅助数组)插入
时间复杂度(平均/最坏)O(n²)O(n log n)归并
稳定性稳定稳定
小规模性能常数小、对小数据快递归开销插入

逐条审视题干 3 个理由:

  • ① 代码更短 → 反了(归并代码更长)。✗
  • ② 占用空间更少 → 反了(归并需 O(n) 辅助数组)。✗
  • ③ 运行效率更高 → (O(n log n) vs O(n²),n 较大时归并显著占优,正是为什么实际工程中大规模排序选归并)。✓

只有 ③ 成立。

最终答案是 B

常见混淆点:很多教材会说"归并排序更优"——指的是渐进时间复杂度这一个维度,并不意味着所有指标都更好。算法选型是"权衡"而非"全面胜出",这道题就是在考察这种权衡意识。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数