给出含有n个学生的成绩表,每条记录由学号、姓名和分数组成,编写具体函数完成下列操作:设计一个菜单操作界面,实现录入学生基本信息,直接插入排序,折半插入排序,冒泡排序,快速排序,简单选择排序,输出学生信息,退出等基本操作
时间: 2024-01-11 07:04:53 浏览: 140
用C语言实现成绩表的快速排序程序设计
5星 · 资源好评率100%
好的,我可以提供一个示例代码,供您参考。这里我采用C++语言实现该程序。
```
#include <iostream>
#include <string>
using namespace std;
// 定义学生类
class Student {
public:
string id; // 学号
string name; // 姓名
int score; // 分数
// 构造函数
Student(string id, string name, int score) {
this->id = id;
this->name = name;
this->score = score;
}
};
// 直接插入排序
void insertSort(Student* arr, int n) {
for (int i = 1; i < n; i++) {
Student key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j].score > key.score) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
// 折半插入排序
void binaryInsertSort(Student* arr, int n) {
for (int i = 1; i < n; i++) {
Student key = arr[i];
int left = 0, right = i - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid].score > key.score) {
right = mid - 1;
}
else {
left = mid + 1;
}
}
for (int j = i - 1; j >= left; j--) {
arr[j + 1] = arr[j];
}
arr[left] = key;
}
}
// 冒泡排序
void bubbleSort(Student* arr, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j].score > arr[j + 1].score) {
swap(arr[j], arr[j + 1]);
}
}
}
}
// 快速排序
void quickSort(Student* arr, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
Student pivot = arr[left];
while (i < j) {
while (i < j && arr[j].score >= pivot.score) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i].score <= pivot.score) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
// 简单选择排序
void selectSort(Student* arr, int n) {
for (int i = 0; i < n - 1; i++) {
int min_index = i;
for (int j = i + 1; j < n; j++) {
if (arr[j].score < arr[min_index].score) {
min_index = j;
}
}
if (min_index != i) {
swap(arr[i], arr[min_index]);
}
}
}
// 录入学生信息
void inputStudent(Student* arr, int n) {
for (int i = 0; i < n; i++) {
string id, name;
int score;
cout << "请输入第" << i + 1 << "个学生的学号、姓名和分数:";
cin >> id >> name >> score;
arr[i] = Student(id, name, score);
}
}
// 输出学生信息
void outputStudent(Student* arr, int n) {
for (int i = 0; i < n; i++) {
cout << arr[i].id << "\t" << arr[i].name << "\t" << arr[i].score << endl;
}
}
// 菜单操作界面
void menu() {
int n;
cout << "请输入学生人数:";
cin >> n;
Student* arr = new Student[n];
inputStudent(arr, n);
while (true) {
cout << endl << "请选择排序算法:" << endl;
cout << "1. 直接插入排序" << endl;
cout << "2. 折半插入排序" << endl;
cout << "3. 冒泡排序" << endl;
cout << "4. 快速排序" << endl;
cout << "5. 简单选择排序" << endl;
cout << "6. 输出学生信息" << endl;
cout << "7. 退出程序" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
insertSort(arr, n);
cout << "直接插入排序结果:" << endl;
outputStudent(arr, n);
break;
case 2:
binaryInsertSort(arr, n);
cout << "折半插入排序结果:" << endl;
outputStudent(arr, n);
break;
case 3:
bubbleSort(arr, n);
cout << "冒泡排序结果:" << endl;
outputStudent(arr, n);
break;
case 4:
quickSort(arr, 0, n - 1);
cout << "快速排序结果:" << endl;
outputStudent(arr, n);
break;
case 5:
selectSort(arr, n);
cout << "简单选择排序结果:" << endl;
outputStudent(arr, n);
break;
case 6:
cout << "学号\t姓名\t分数" << endl;
outputStudent(arr, n);
break;
case 7:
cout << "谢谢使用!" << endl;
return;
default:
cout << "输入有误,请重新输入!" << endl;
}
}
}
// 主函数
int main() {
menu();
return 0;
}
```
该程序中,我们首先定义了一个学生类,并实现了直接插入排序、折半插入排序、冒泡排序、快速排序和简单选择排序等基本排序算法,以及录入学生信息和输出学生信息等操作。然后,我们通过菜单操作界面来选择排序算法,并输出排序结果或学生信息。最后,我们在主函数中调用菜单函数来启动程序。
请注意,该代码仅供参考,具体实现方式可能与您的要求略有不同。如果有需要,您可以根据自己的实际情况进行修改和调整。
阅读全文