GESP 四级 · GESP 202606 C++ 四级 第 14 题

选择题 · 答案 C · 考点:时间复杂度分析

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

题目

下面代码使用某种排序算法,将数组中的元素按从小到大排序。这段代码使用的排序算法是( )。

void mystery_sort(double arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minPos = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minPos]) {
                minPos = j;
            }
        }
        double temp = arr[i];
        arr[i] = arr[minPos];
        arr[minPos] = temp;
    }
}
答案:C

考点

时间复杂度分析

解题思维

答案C。考点: 循环结构——for/while的执行与嵌套。

常见错误

关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。

数组下标从0开始,a[n]访问的是第n+1个元素。越界不报编译错但结果不可预测。

详细解析(节选)

【考点】选择排序|双层循环|时间复杂度

🎯 考纲定位:本题卡住的是"从代码识别算法"这一核心能力。GESP四级要求能读懂排序算法结构,而非死记名字。命题人特意放一个看似冒泡的双层循环,就是想测试你是否真的理解算法本质。

🧠 解题思维:外层循环控制排序轮数,内层循环寻找当前未排序部分的最小值,最后把最小值与当前位置交换。这是选择排序的标准实现。通法:看到"找极值 + 交换"的组合操作,基本可以锁定选择排序。

🪤 陷阱拆解:A项冒泡排序错在"相邻交换"而非"全局找最小";B项插入排序错在"逐步构建有序区"而非"一次性交换";最阴险的是D项,因为双层循环容易让人误判为冒泡,但仔细看内循环是扫描整个剩余区间,不是相邻比较。如果你只背结论不读代码,就会掉进这个坑。

🔄 反命题思维:如果把 swap 改成"无操作",算法就退化成了找最小值但不排序;如果把内循环改为只和相邻元素比较,就变成冒泡排序。刷到类似题时先问:核心操作是什么?交换还是插入?

同考点真题

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