⚠️ 换一个输入,它就露馅了

同一个 msort_bad,换成 [0, 1, 2, 4, 3]: def msort(a): if len(a) <= 1: return list(a) m = len(a) // 2 L

开始练习 →

自己写:把合并的最后一步补上

补全归并的收尾——循环出来时,两边一定有一边还剩着。

开始练习 →

🔴 120 种输入里,错的那版有几种照样对

把五个元素的全部 120 种排列都喂给 msort_bad,数一数有多少种它照样给出了正确结果。

开始练习 →

交付:基线 / 归纳步 / 不丢元素

把归纳证明的三件事各写成一次检查。归纳步拿 [1,4,6] 和 [2,3,5] 两个已经排好的半边去合并;"不丢元素"拿 [0,1,2,4,3] 验。

开始练习 →

「下界」说的是什么

说比较排序有一个下界,意思是【0】。

开始练习 →

⚠️ 决策树的叶子对应什么

把一个比较排序画成决策树,每个叶子对应【0】。

开始练习 →

这个下界管的是哪一种情况

比较排序的这个下界,说的是【0】。

开始练习 →

五个元素的下界是多少

五个元素一共有多少种排列?装下这么多叶子的二叉树至少多高? import math from itertools import permutations def merge_cmp(a): """归并

开始练习 →

两种排序的最坏比较次数

把五个元素的全部 120 种排列都跑一遍,插入排序和归并排序各自最坏比了多少次: import math from itertools import permutations def merge_cmp(a): "&qu

开始练习 →

🔴 有输入低于下界,这矛盾吗

下界算出来是 7。数一数 120 种输入里,归并排序用了不到 7 次就排完的有几种,再报出最坏的那一档。

开始练习 →