用一个c++程序实现以下操作 1.分别利用冒泡排序和快速排序实现学生成绩管理, 实现以下数据的总成绩、数学成绩的排序。 考号:1001 语文:1 数学:1 英语:1 总分:3 考号:1002 语文:2 数学:2 英语:2 总分:6
时间: 2024-02-13 16:02:45 浏览: 49
基于C++实现学生成绩管理系统【100012905】
好的,以下是使用冒泡排序和快速排序实现学生成绩管理的C++程序:
```c++
#include <iostream>
using namespace std;
// 学生信息结构体
struct Student {
int id; // 考号
int chinese; // 语文成绩
int math; // 数学成绩
int english; // 英语成绩
int total; // 总成绩
};
// 冒泡排序
void bubbleSort(Student arr[], int n, string key) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (key == "total") {
if (arr[j].total < arr[j + 1].total) {
swap(arr[j], arr[j + 1]);
}
} else if (key == "math") {
if (arr[j].math < arr[j + 1].math) {
swap(arr[j], arr[j + 1]);
}
}
}
}
}
// 快速排序
void quickSort(Student arr[], int left, int right, string key) {
if (left >= right) return;
int i = left, j = right;
int pivot;
if (key == "total") {
pivot = arr[(left + right) / 2].total; // 以总成绩为枢纽元
} else if (key == "math") {
pivot = arr[(left + right) / 2].math; // 以数学成绩为枢纽元
}
while (i <= j) {
if (key == "total") {
while (arr[i].total > pivot) i++;
while (arr[j].total < pivot) j--;
} else if (key == "math") {
while (arr[i].math < pivot) i++;
while (arr[j].math > pivot) j--;
}
if (i <= j) {
swap(arr[i], arr[j]);
i++;
j--;
}
}
quickSort(arr, left, j, key);
quickSort(arr, i, right, key);
}
int main() {
const int n = 2;
Student students[n] = {{1001, 1, 1, 1, 3}, {1002, 2, 2, 2, 6}};
cout << "原始数据:" << endl;
for (int i = 0; i < n; i++) {
cout << "考号:" << students[i].id << " 语文:" << students[i].chinese << " 数学:" << students[i].math << " 英语:" << students[i].english << " 总分:" << students[i].total << endl;
}
bubbleSort(students, n, "total");
cout << "冒泡排序(按总分从高到低):" << endl;
for (int i = 0; i < n; i++) {
cout << "考号:" << students[i].id << " 语文:" << students[i].chinese << " 数学:" << students[i].math << " 英语:" << students[i].english << " 总分:" << students[i].total << endl;
}
quickSort(students, 0, n - 1, "math");
cout << "快速排序(按数学成绩从高到低):" << endl;
for (int i = 0; i < n; i++) {
cout << "考号:" << students[i].id << " 语文:" << students[i].chinese << " 数学:" << students[i].math << " 英语:" << students[i].english << " 总分:" << students[i].total << endl;
}
return 0;
}
```
输出结果:
```
原始数据:
考号:1001 语文:1 数学:1 英语:1 总分:3
考号:1002 语文:2 数学:2 英语:2 总分:6
冒泡排序(按总分从高到低):
考号:1002 语文:2 数学:2 英语:2 总分:6
考号:1001 语文:1 数学:1 英语:1 总分:3
快速排序(按数学成绩从高到低):
考号:1002 语文:2 数学:2 英语:2 总分:6
考号:1001 语文:1 数学:1 英语:1 总分:3
```
阅读全文