GESP 四级 · GESP 202512 C++ 四级 第 11 题

选择题 · 答案 B

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

题目

下面的函数 selectTopK() 实现从 $n$ 个学生中选出前 $k$ 名成绩最好的学生颁发奖学金(不需要对所有学生完全排序,只需要找出前 $k$ 名),则横线上应填写( )。

struct Student {
    string name;
    int score;
};

void selectTopK(Student students[], int n, int k) {
    for (int i = 0; i < k; i++) {
        int maxIdx = i;
        for (__________________) {  // 在此处填入代码
            if (students[j].score > students[maxIdx].score) {
                maxIdx = j;
            }
        }

        if (maxIdx != i) {
            Student temp = students[i];
            students[i] = students[maxIdx];
            students[maxIdx] = temp;
        }
    }
}
答案:B

解题思维

答案B。代码补全要考虑参数传递方式。如果需要修改实参,需用指针(*)传递。排序算法要理解每步比较的含义。

常见错误

排序代码补全要理解每步比较的含义。选择排序找最小值时比较的是array[min]>array[j]。

详细解析(节选)

【考点】选择排序|循环嵌套

🎯 考纲定位(考点定位)

本题考查选择排序算法在 GESP 四级"算法设计与分析"模块中的核心应用。命题人卡住绝大多数考生的弱点在于:只会背诵"冒泡排序"的相邻交换逻辑,却对选择排序的"每轮从剩余部分选最大"这一本质理解模糊,一遇到嵌套循环就慌。

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