Py算法与数据结构

11 什么是排序?

排序规则、记录关联、稳定性与成本

对应本节 12 道题。点击题目展开答案和理由,保留此前生成的详细解析。
第 01 题 问题 1

对记录按分数升序排序后,姓名与分数可以重新任意配对吗?

参考答案

不可以。

解析

排序移动的是完整记录或它的引用;键只负责比较,其他字段必须保持关联。

第 02 题 问题 2

带重复值的升序数组应满足相邻项 < 还是 <=?

参考答案

<=。

解析

排序允许重复值;严格 < 会把合法的相等键误判为未排序。

第 03 题 问题 3

a=[3,1,2]; b=sorted(a)。a、b 分别是什么?

参考答案

a=[3,1,2];b=[1,2,3]。

解析

sorted 返回新列表,不修改原列表。

第 04 题 问题 4

a=[3,1,2]; b=a.sort()。a、b 分别是什么?

参考答案

a=[1,2,3];b=None。

解析

list.sort 原地排序,返回 None。不要用 a=a.sort() 接收排序结果。

第 05 题 问题 5

原记录 [(90,"A"),(80,"X"),(90,"B")] 按分数稳定排序,结果是什么?

参考答案

[(80,"X"),(90,"A"),(90,"B")]。

解析

90A 在 90B 之前;标签不作为比较键。

第 06 题 问题 6

“不稳定算法每次一定改变相等键顺序”对吗?

参考答案

不对。

解析

不稳定表示不能保证保留,不代表每个输入都会破坏顺序。

第 07 题 问题 7

先稳定按姓名排,再稳定按班级排,最终哪个字段是主要键?

参考答案

班级是主要键,姓名是同班内的次要键。

解析

后一次稳定排序保留相等班级记录在前一次排序中的姓名顺序。

第 08 题 问题 8

任意互异键的比较排序最坏比较次数下界是 O(n log n) 还是 Ω(n log n)?

参考答案

下界用 Ω(n log n)。

解析

O 表示上界。比较决策树必须区分 n! 种排列,其高度至少为 log₂(n!)。

第 09 题 问题 9

计数排序 O(n+K) 为什么不违反比较排序下界?

参考答案

它利用有限整数范围,超出了仅用键大小比较的模型。

解析

K 也必须计入成本;不能对任意类型键都直接使用。

第 10 题 问题 10

20GB 数据、可用工作内存 1GB,应该只用一次内存快排吗?

参考答案

不应;通常先分块生成有序段,再外部归并。

解析

全部数据及工作空间放不进内存,要控制块与缓冲区,并考虑读写轮数。

第 11 题 问题 11

如何用原始位置给相等键制定明确顺序?

参考答案

比较 (key, original_index)。

解析

记录原始位置作为次要键,消除平局;装饰数据会占额外空间。

第 12 题 问题 12

“算法 A 比较少,因此在所有环境下一定更快”对吗?

参考答案

不对。

解析

还需考虑键比较成本、写入、缓存、空间、解释器和输入规模。大 O 不是实际秒数。