Appearance
题目
对给定的关键字序列 110, 119, 007, 911, 114, 120, 122 进行基数排序,则第 2 趟分配收集后得到的关键字序列是()。
错因
A
桶 1 的内部顺序写错了。第 2 趟分配时,桶里元素按"第 1 趟收集后的顺序"进入(不是原始序列),所以桶 1 应该按 110, 911, 114, 119(来自第 1 趟收集结果 D 中的相对顺序)入桶;选 A 的人按原始序列顺序 110, 119, 114, 911 入桶,违反了基数排序的稳定性——每一趟桶内顺序必须沿用上一趟的相对位置,不能回到原始序列。
B
在 A 的错误基础上还把桶 2 的顺序也搞反,写成 122, 120。第 1 趟收集后桶 2 的相对顺序是 120 在 122 前面(120 个位 0 → 桶 0;122 个位 2 → 桶 2,但桶 2 只有 122 一个;继续看……实际上 120 和 122 是各自分到不同的桶里,到第 2 趟看十位时才一起进桶 2,相对顺序按上一趟收集结果是 120 先于 122)。选 B 的人完全没遵循"稳定排序"。
D
把"第 1 趟结果"误当成了"第 2 趟"答案。D 序列就是按个位分配收集的产物——选 D 的人少做了一趟,停在了第 1 趟终点。
总解析
LSD(低位优先)基数排序流程:从最低位开始,每一趟做一次"按当前位分桶 → 按桶序号收集",重复直到最高位。本题数据是 3 位数,共需 3 趟(个、十、百)。
关键稳定性:每一趟入桶时,元素按上一趟的相对顺序排入;同一桶内顺序不变。这是基数排序正确性的核心。
第 1 趟:按个位分配
原始序列:110, 119, 007, 911, 114, 120, 122
| 桶 | 元素(按原序入桶) |
|---|---|
| 0 | 110, 120 |
| 1 | 911 |
| 2 | 122 |
| 4 | 114 |
| 7 | 007 |
| 9 | 119 |
收集(按桶号 0→9 顺序拼接):
110, 120, 911, 122, 114, 007, 119 ← 这是第 1 趟结果(也是选项 D)第 2 趟:按十位分配(输入 = 第 1 趟收集结果)
依次扫描 110, 120, 911, 122, 114, 007, 119:
| 数 | 十位 | 入桶 |
|---|---|---|
| 110 | 1 | 桶 1 |
| 120 | 2 | 桶 2 |
| 911 | 1 | 桶 1 |
| 122 | 2 | 桶 2 |
| 114 | 1 | 桶 1 |
| 007 | 0 | 桶 0 |
| 119 | 1 | 桶 1 |
各桶内容(按入桶顺序,严格沿用上一趟相对顺序):
| 桶 | 元素 |
|---|---|
| 0 | 007 |
| 1 | 110, 911, 114, 119 |
| 2 | 120, 122 |
收集(按桶号 0→9 顺序):
007, 110, 911, 114, 119, 120, 122正好对应选项 C。
检查信号:第 2 趟结束后,整个序列对"末两位"是有序的——007(007)、110(10)、911(11)、114(14)、119(19)、120(20)、122(22)——确实按末两位升序,自洽。
最终答案是 C。