曲奇编程

GESP快速排序考点精讲|真题解析与算法模板

updated 2026-09-05 · qu7.top

GESP 快速排序考点完全攻略

为什么快速排序是 GESP 高频考点?

在 GESP 5-8 级的历年真题中,排序算法几乎每次必考,而 快速排序(Quick Sort) 又是其中的重中之重。

原因很简单:

  • 快速排序是 分治思想 的典型代表
  • 它涉及 递归、数组操作、边界条件 等 GESP 核心考点
  • 时间复杂度分析是 GESP 常考的理论题

一、快速排序的核心原理

基本思想(分治法)

快速排序(arr, left, right):
  1. 选择一个基准值(pivot)
  2. 将数组分为两部分:左边 ≤ pivot,右边 > pivot
  3. 递归排序左半部分
  4. 递归排序右半部分

关键步骤:分区(Partition)

分区是快速排序的核心。以常见的 Lomuto 分区方案 为例:

int partition(int arr[], int low, int high) {
    int pivot = arr[high];      // 选择最后一个元素作为基准
    int i = low - 1;             // i 是「小于等于pivot区域」的边界
    
    for (int j = low; j < high; j++) {
        if (arr[j] <= pivot) {
            i++;
            swap(arr[i], arr[j]); // 把小于等于pivot的元素放到左边
        }
    }
    swap(arr[i + 1], arr[high]); // 把pivot放到正确位置
    return i + 1;                 // 返回pivot的最终索引
}

完整快速排序模板

void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);  // 获取分区点
        quickSort(arr, low, pi - 1);         // 排序左半部分
        quickSort(arr, pi + 1, high);       // 排序右半部分
    }
}

二、GESP 真题中快速排序的常见考查方式

类型 1:给定初始数组,求某一趟排序后的结果

例题风格:对数组 [49, 38, 65, 97, 76, 13, 27] 进行快速排序,若选取第一个元素 49 作为基准,则 第一趟排序结束后 数组的状态是?

解题技巧

  1. 明确基准值(pivot)的选择方式(首元素 / 尾元素 / 中间元素)
  2. 模拟分区过程,逐步追踪元素位置
  3. 注意题目要求的分区方案(Lomuto 或 Hoare)

类型 2:快速排序的时间/空间复杂度

情况 时间复杂度 说明
最好情况 O(n log n) 每次分区均匀
平均情况 O(n log n) 随机数据
最坏情况 O(n²) 数组已有序/逆序,且每次选首/尾元素为 pivot
空间复杂度 O(log n) 递归调用栈

⚠️ GESP 常考陷阱:最坏情况的时间复杂度!很多学生只记住了 O(n log n) 却忘了 O(n²)。

类型 3:快速排序 vs 其他排序算法的比较

GESP 经常考各种排序算法的对比:

排序算法 最好时间 平均时间 最坏时间 稳定性 空间复杂度
冒泡排序 O(n) O(n²) O(n²) 稳定 O(1)
选择排序 O(n²) O(n²) O(n²) 不稳定 O(1)
插入排序 O(n) O(n²) O(n²) 稳定 O(1)
快速排序 O(n log n) O(n log n) O(n²) 不稳定 O(log n)
归并排序 O(n log n) O(n log n) O(n log n) 稳定 O(n)

类型 4:代码填空 / 补全

GESP 5 级以上可能出现给出不完整的快速排序代码,要求填写关键行。

高频填空点

  • if (low < high) 这个递归终止条件
  • partition 函数中的 swap 操作
  • 递归调用时的边界 pi - 1pi + 1

三、快速排序的 GESP 备考策略

  1. 理解 > 死记:不要死背代码,要能在纸上手动模拟分区过程
  2. 注意边界low < high 还是 low <= highi + 1 还是 i?这些细节决定正误
  3. 对比学习:把快速排序和归并排序放在一起学,理解它们的异同
  4. 真题练习:本站收录的 GESP 4-8 级真题 中包含大量排序相关题目

四、快速排序知识检查清单

备考前,确认你已经掌握了以下内容:

  • 能口述快速排序的基本思想和分治策略
  • 能手动对一个小数组完成一趟快速排序的分区过程
  • 知道最好/平均/最坏时间复杂度及其出现条件
  • 了解快速排序为什么不稳定(举例说明)
  • 能写出完整的 quickSort + partition 代码
  • 知道如何优化最坏情况(随机选择 pivot)

🔥 排序算法是 GESP 的必考点,不要在这个问题上丢分。现在就去 GESP 真题专区 找几套排序相关的试卷练练手!

常见问题

GESP几级开始考快速排序?

快速排序的概念在GESP四级就会涉及(作为排序算法的一种),但真正要求手写和深入理解快速排序通常在五级及以上的考试中出现。四级主要考排序的基本概念和冒泡/选择排序。

GESP考试中需要手写快速排序吗?

五级以上可能会出现「补全代码」或「写出快速排序某一步结果」的题目。完全手写从头实现的可能性较低,但需要理解分区(partition)过程和递归调用逻辑。

快速排序和冒泡排序在GESP中考的区别是什么?

冒泡排序在GESP 3-4级考,主要考「经过k趟排序后的序列状态」;快速排序在5级以上考,更侧重时间复杂度分析、分区过程、以及与其他排序算法的比较。

有什么快速排序的学习资源推荐?

建议先用本站GESP真题中的排序相关题目练习,配合《算法竞赛入门经典》等教材理解原理。洛谷上有大量排序算法练习题,可以在线提交验证。

刷题巩固

看完攻略,去 GESP 真题专区开一套历年真题,检验学习成果

进入真题专区

继续阅读