CSP-S 提高级 · CSP 2023 提高级第一轮 第 10 题

选择题 · 答案 C · 考点:快速排序、排序基础

← 整套速查表 CSP-S 提高级 全部真题

题目

假设快速排序算法的输入是一个长度为n 的已排序数组,且该快速排序算法在分治过程总是选择第一个元素作为基准元素。以下哪个选项描述的是在这种情况下的快速排序行为?

答案:C

考点

快速排序排序基础

解题思维

这题核心就是看 pivot 选首元素时,已排序数组会触发什么极端情况。拿到题先想:有序数组里第一个数最小,分治后左边永远空、右边只剩 n−1,递归深度直接拉满到 n,每层比较次数递减,加起来就是平方级,所以时间复杂度 Θ(n²)。

常见错误

最容易犯的错是凭直觉选 B(Θ(n log n)),把平均情况和最坏情况混为一谈;或者觉得数组已排好序反而更快,选 A;还有人以为快速排序对已排序数组失效,选 D。这些坑都源于没抓住“首元素做 pivot + 已排序”这一组合带来的极端不平衡分割,导致递归树退化成一条线,比较次数从 n log n 飙到 n²。

详细解析(节选)

这道题考查快速排序在最坏情况下的时间复杂度,特别聚焦于输入已排序且基准元素固定为第一个元素时的表现。快速排序的核心是分治:选一个基准(pivot),把数组分成小于等于 pivot 和大于 pivot 的两部分,然后递归排序。当数组本身已经升序排列,而算法每次都选第一个元素作为 pivot 时,第一个元素就是当前区间的最小值,划分后左侧部分为空,右侧部分只剩下 n−1 个元素。这意味着每一层递归只减少了一个元素,递归深度直接达到 n,整个递归树退化成了单条线。每层需要进行的比较次数分别是 n−1、n−2、…、1,总和为 n(n−1)/2,即 Θ(n²)。命题人喜欢在这里挖坑,就是利用学生默认快速排序平均是 Θ(n log n) 的惯性思维,或者误以为已排序对快速排序有利。避坑关键在于记住:快速排序遇到已排序数组且 pivot 固定为端点时,必然退化到最坏情况。实际应用中为了避免这种情况,常用随机选 pivot 或三数取中法,C++ 的 std::sort 更是采用内省排序(IntroSort),检测到递归过深时切换到堆排序。历年数据来看,快速排序在题库中已考过 53 题,覆盖 7 个考试级别,其中 2023 年考了 6 题、2024 年 15 题、2025 年 14 题、2026 年 7 题,可见该考点热度持续攀升,尤其是提高级和 GESP 八级、七级。基于趋势,未来几年这类“已排序 + 固定 pivot”的最坏情况分析题仍会高频出现,甚至可能结合其他排序算法对比出题。因此,看到“快速排序 + 已排序数组 + 首元素 pivot”三件套,条件反射选 Θ(n²) 就是稳操胜券。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断