题:补充函数 sortByChoose()的剩余部分,其要求是利用选择排序算法根据学生成绩(score)实现对结构体数组元素降序排序。
时间: 2023-11-27 07:55:02 浏览: 447
二维数组,选择排序和冒泡排序
以下是 `sortByChoose()` 函数的代码实现:
```c++
void sortByChoose(student stu[], int n) {
for (int i = 0; i < n - 1; i++) {
int maxIndex = i;
for (int j = i + 1; j < n; j++) {
if (stu[j].score > stu[maxIndex].score) {
maxIndex = j;
}
}
if (maxIndex != i) {
swap(stu[i], stu[maxIndex]);
}
}
}
```
该函数利用了选择排序算法,通过遍历数组中的所有元素,每次找到剩余元素中分数最高的学生,然后将其与当前元素进行交换,从而实现对学生成绩的降序排序。
需要注意的是,该函数接收一个结构体数组 `stu` 和数组长度 `n` 作为参数。结构体数组中的每个元素包含了学生的姓名和分数信息。在函数中,我们使用 `i` 和 `j` 两个变量分别表示当前遍历到的元素下标和剩余元素中最高分数的元素下标。在内层循环中,如果发现有比当前最高分数更高的学生,则更新 `maxIndex` 的值。最后,如果 `maxIndex` 不等于 `i`,说明找到了一个更高分数的学生,需要将其与当前元素进行交换。
使用该函数示例:
```c++
#include <iostream>
#include <string>
using namespace std;
struct student {
string name;
int score;
};
void sortByChoose(student stu[], int n);
int main() {
student stu[] = {
{"张三", 80},
{"李四", 90},
{"王五", 70},
{"赵六", 85},
{"钱七", 95}
};
int n = sizeof(stu) / sizeof(student);
sortByChoose(stu, n);
for (int i = 0; i < n; i++) {
cout << stu[i].name << " " << stu[i].score << endl;
}
return 0;
}
// 输出结果:
// 钱七 95
// 李四 90
// 赵六 85
// 张三 80
// 王五 70
```
上述代码中,我们定义了一个结构体 `student`,包含了学生的姓名和分数信息。在 `main()` 函数中,我们定义了一个结构体数组 `stu`,其中包含了 5 名学生的信息。然后调用 `sortByChoose()` 函数进行降序排序,并输出排序后的结果。
阅读全文