Skip to content

2024年 408 数据结构 第 10 题

数据结构2024年选择题2分

题目

初始有三个升序序列 (3, 5)、(7, 9)、(6),若按从左至右的次序选择有序序列进行二路归并排序,则关键字之间的总比较次数是( )。

错因

A

只数到第一次合并的比较次数(2 次)就草草加了 1 凑成 3,或者按"最终结果有 5 个元素,要比 3 次大概可以排好"这种凭感觉的估算。漏算了第二次合并里 7 与 6 那一步比较,第二次合并要从头到尾按头部对比,不止 2 次。

B

第一次合并 2 次没问题,但第二次合并漏了 1 次:误以为单元素序列 (6) 与长序列归并时只需要比较一次(6 找到位置就直接插入),没意识到归并算法是"逐位比较两个序列头"——6 需要分别与 3、5、7 顺次比较,直到找到比它小的元素停止。漏算了 5 vs 6 这一步,得 2+2=4。

D

把"剩余元素直接拷贝"那一步也算成了比较次数。第一次合并 (3,5) ⊕ (7,9) 时,5 输出后第一个序列已空,直接拷贝 7、9 不再比较,但选 D 的人多算了 1 次(5 vs 9 或类似),得 3+3=6。归并算法的关键约定是"一旦一侧空了就尾接,不再比较"。

总解析

二路归并合并 (A, B) 的比较次数规则:每一步从 A、B 两个序列头各取一个元素比较一次,败者继续等待、胜者输出;当其中一个序列空了,另一个序列的剩余元素直接尾接拷贝,不再产生比较

按"从左至右"次序合并三个序列:

第一次合并

比较胜者
13 vs 73
25 vs 75
3左序列空,尾接 7、9

合并结果:比较 2 次

第二次合并

比较胜者
13 vs 63
25 vs 65
37 vs 66(右序列空)
4尾接 7、9

合并结果:比较 3 次

总比较次数 = 2 + 3 = 5

最终答案是 C

最后更新:

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

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