GESP 五级 · GESP 202509 C++ 五级 第 11 题

选择题 · 答案 D · 考点:快速排序、复杂度分析

← 整套速查表 GESP 五级 全部真题

题目

下述 C++ 代码实现了快速排序算法,下面说法错误的是( )。

int partition(vector<int>& arr, int low, int high) {
    int i = low, j = high;
    int pivot = arr[low];                    // 以首元素为基准
    while (i < j) {
        while (i < j && arr[j] >= pivot) j--;  // 从右往左查找
        while (i < j && arr[i] <= pivot) i++;  // 从左往右查找
        if (i < j) swap(arr[i], arr[j]);
    }
    swap(arr[i], arr[low]);
    return i;
}

void quickSort(vector<int>& arr, int low, int high) {
    if (low >= high) return;
    int p = partition(arr, low, high);
    quickSort(arr, low, p - 1);
    quickSort(arr, p + 1, high);
}
答案:D

考点

快速排序复杂度分析

解题思维

分析时间复杂度时关注循环层数和每层迭代次数,递归算法则分析递归树。注意最坏/最好/平均情况的区别。

常见错误

分析复杂度时注意外层循环和内层循环的关联。例如内外两层都到n的循环不一定是O(n²),要看内层是否每次都在缩小。

详细解析(节选)

【考点】快速排序|分区操作(partition)|递归复杂度分析

🎯 考纲定位

GESP 五级·算法设计与分析——排序算法。命题人专门挑这道题,就是卡住那些"背结论不验细节"的考生:知道快速排序 O(n log n) 却说不清 partition 为什么必须按这个顺序写。

同考点真题

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