Skip to content

2022年 408 数据结构 第 11 题

数据结构2022年选择题2分

题目

对数据进行排序时,若采用直接插入排序而不采用快速排序,则可能的原因是()。

Ⅰ. 大部分元素已有序

Ⅱ. 待排序元素数量很少

Ⅲ. 要求空间复杂度为

Ⅳ. 要求排序算法是稳定的

错因

A

漏掉 III 和 IV,只看到了"性能向"原因(小规模、近似有序)。其实空间复杂度稳定性也是常见的选型理由:直接插入排序原地交换、空间 ;快排递归栈平均 、最坏 。直接插入排序稳定,快排不稳定(pivot 交换会跨越相等元素)。

B

只挑了 III、IV(空间和稳定性),漏掉了 I 和 II。但 I 和 II 才是"什么时候选直接插入排序而不是快排"最经典的两条理由:

  • I:近似有序时直接插入只需 ,快排在已排序输入下若 pivot 选不好甚至会退化到
  • II:元素少(如 ),快排的递归开销和常数都比直接插入大,反而更慢——这也是工业实现里"短数组切换到插入排序"的来源。

C

漏掉 III(空间复杂度)。可能是把" 空间"误以为快排也满足。但快排的递归栈深度 = (平均)或 (最坏),并不是 ;而直接插入排序只用几个临时变量,确实 。这一项是真实区分点。

总解析

思路:把直接插入排序与快速排序在四个维度上做并列对比,看哪些场景下"插入更优"。

维度直接插入排序快速排序插入是否占优?
大部分已有序(I)最好 若 pivot 取首/尾元素,最坏退化 占优
元素少(II)常数小、几乎无递归开销递归调用开销不可忽略,常数较大占优
空间 (III)原地,平均 递归栈,最坏 占优
稳定性(IV)稳定(只与前一个相邻元素比较,相等不交换)不稳定(pivot 划分会跨越相等元素)占优

四种场景下都构成"选直接插入排序而非快排"的合理理由,所以 I、II、III、IV 全部成立。

最终答案是 D(Ⅰ、Ⅱ、Ⅲ、Ⅳ)

最后更新:

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

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