请用c++语言实现
时间: 2024-02-28 09:57:26 浏览: 41
好的,以下是一个可能的C++语言实现方案:
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 定义学生类
class Student {
public:
string id; // 学号
string name; // 姓名
int score; // 分数
};
// 录入学生信息,返回学生列表
vector<Student> enterStudentInfo() {
vector<Student> students;
int n;
cout << "请输入学生个数:";
cin >> n;
for (int i = 0; i < n; i++) {
Student student;
cout << "请输入第" << i + 1 << "个学生的学号、姓名、分数:";
cin >> student.id >> student.name >> student.score;
students.push_back(student);
}
return students;
}
// 直接插入排序
void insertionSort(vector<Student>& students) {
int n = students.size();
for (int i = 1; i < n; i++) {
Student temp = students[i];
int j = i - 1;
while (j >= 0 && students[j].score > temp.score) {
students[j + 1] = students[j];
j--;
}
students[j + 1] = temp;
}
}
// 折半插入排序
void binaryInsertionSort(vector<Student>& students) {
int n = students.size();
for (int i = 1; i < n; i++) {
Student temp = students[i];
int left = 0, right = i - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (students[mid].score > temp.score) {
right = mid - 1;
} else {
left = mid + 1;
}
}
for (int j = i - 1; j >= left; j--) {
students[j + 1] = students[j];
}
students[left] = temp;
}
}
// 冒泡排序
void bubbleSort(vector<Student>& students) {
int n = students.size();
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (students[j].score > students[j + 1].score) {
swap(students[j], students[j + 1]);
}
}
}
}
// 快速排序
void quickSort(vector<Student>& students, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
Student pivot = students[left];
while (i < j) {
while (i < j && students[j].score >= pivot.score) {
j--;
}
students[i] = students[j];
while (i < j && students[i].score <= pivot.score) {
i++;
}
students[j] = students[i];
}
students[i] = pivot;
quickSort(students, left, i - 1);
quickSort(students, i + 1, right);
}
// 简单选择排序
void selectionSort(vector<Student>& students) {
int n = students.size();
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (students[j].score < students[minIndex].score) {
minIndex = j;
}
}
if (minIndex != i) {
swap(students[i], students[minIndex]);
}
}
}
// 输出学生信息
void outputStudentInfo(vector<Student>& students) {
int n = students.size();
for (int i = 0; i < n; i++) {
cout << students[i].id << " " << students[i].name << " " << students[i].score << endl;
}
}
int main() {
vector<Student> students;
while (true) {
cout << "请选择操作:1.录入学生信息 2.直接插入排序 3.折半插入排序 4.冒泡排序 5.快速排序 6.简单选择排序 7.输出学生信息 8.退出" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
students = enterStudentInfo();
break;
case 2:
insertionSort(students);
break;
case 3:
binaryInsertionSort(students);
break;
case 4:
bubbleSort(students);
break;
case 5:
quickSort(students, 0, students.size() - 1);
break;
case 6:
selectionSort(students);
break;
case 7:
outputStudentInfo(students);
break;
case 8:
return 0;
default:
cout << "无效的选择,请重新输入" << endl;
break;
}
}
return 0;
}
```
以上是一个可能的C++语言实现方案,您可以根据具体需求进行调整和扩展。希望对您有所帮助。