Skip to content

2020年 408 数据结构 第 11 题

数据结构2020年选择题2分

题目

对大部分元素已有序的数组进行排序时,直接插入排序比简单选择排序效率更高,其原因是( )。

Ⅰ. 直接插入排序过程中元素之间的比较次数更少

Ⅱ. 直接插入排序过程中所需要的辅助空间更少

Ⅲ. 直接插入排序过程中元素的移动次数更少

错因

B

只看到了"插入排序对几乎已序数组移动很少",却忽略了 I 才是更显著且严格成立的优势。其实简单选择排序的总移动次数始终是 (最多 次赋值),不一定比插入排序多——而比较次数差距才是决定性的( vs )。

C

错把 II 也算对了。直接插入排序和简单选择排序都是原地排序,辅助空间均为 (插入排序需要一个临时变量存"待插入的元素",选择排序需要一个临时变量做交换),二者没有量级差异,谈不上谁"更少"。

D

对三条命题都没仔细辨析,凭"插入排序更优 → 应该哪哪都更优"的整体印象全选。这种"全收"心态在比较类题目里往往掉坑——408 出题人就喜欢在三条命题里塞一两条似是而非的对比项。

总解析

先把两种排序在"大部分已序"情况下的开销摆出来:

指标直接插入排序简单选择排序
比较次数(每个元素只需与其前驱比较 次即可定位)与初始顺序无关,始终为
移动次数(已序部分 移动,少量错位元素需移动若干位)(每趟扫描后做一次交换,共 次交换 次赋值)
辅助空间

逐条分析:

Ⅰ. 比较次数更少。✓

直接插入排序的比较次数与初始有序度强相关:完全有序时只需 次比较;几乎有序时也只比 多一点点,整体是 。 简单选择排序的比较次数与初始顺序完全无关——每趟都要遍历未排序部分找最小值,总比较数固定为 ,是 量级。

差距: vs ,量级差异,决定性。这是直接插入排序在"大部分已序"情况下效率高的根本原因

Ⅱ. 辅助空间更少。✗

两者都是原地排序,空间复杂度均为 。直接插入排序需要一个"哨兵"或临时变量存放当前待插入的关键字;简单选择排序需要一个临时变量做 swap。一个常数 vs 另一个常数,无论怎么算都不能说"更少"。

Ⅲ. 移动次数更少。✗

简单选择排序的移动次数与输入顺序无关:每趟扫描后做 次交换( 次赋值),共 趟,总移动数固定约为 ,是严格 。 直接插入排序的移动次数依赖具体数据:完全有序时为 ;但"大部分已序"≠"完全已序",错位元素需要向后挪位为新元素让位,错位距离累计也可能达到 甚至更高。

更严格地说:在"大部分元素已有序"的一般描述下,无法给出"插入排序的总移动次数严格小于选择排序"的结论——存在一些"几乎已序"的输入,让插入排序的移动次数和选择排序在同一量级、甚至更多。所以 Ⅲ 不成立。

汇总:仅 Ⅰ 正确。

最终答案是 A(仅 Ⅰ)

这道题的"反直觉点"在 Ⅲ:很多人会下意识觉得"插入排序对几乎已序数组移动也少",但选择排序的"每趟只换一次"也很省。比较次数的量级差才是直接插入排序的杀手锏——这是考点的核心。

最后更新:

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

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