创建本班的学生名单,并记录本班数据结构课程的成绩,分别使用以下排序方法对此成绩单进行排序: (1)折半插入法对成绩分别进行从高到底和从低到高排序。 (2)快速排序法对成绩分别进行从高到底和从低到高排序。 (3)简单选择排序法对成绩分别进行从高到底和从低到高排序。要求:1.通过选择功能进行不同的排序2.随机输入人数,姓名和成绩
时间: 2024-04-01 11:32:58 浏览: 71
数据结构课程设计之java排序.doc
好的,您的问题是如何使用不同的排序算法对学生成绩单进行排序。我将为您提供一个示例程序,使用C++语言实现。
```c++
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {
string name;
int score;
};
// 折半插入排序
void binaryInsertionSort(vector<Student>& students, bool ascending) {
for (int i = 1; i < students.size(); i++) {
Student temp = students[i];
int left = 0, right = i - 1;
while (left <= right) {
int mid = (left + right) / 2;
if ((ascending && students[mid].score > temp.score)
|| (!ascending && 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 quickSort(vector<Student>& students, int left, int right, bool ascending) {
if (left >= right) {
return;
}
int i = left, j = right;
Student pivot = students[left]; // 以左边第一个为基准值
while (i < j) {
while ((ascending && students[j].score >= pivot.score)
|| (!ascending && students[j].score <= pivot.score)) {
j--;
}
students[i] = students[j];
while ((ascending && students[i].score <= pivot.score)
|| (!ascending && students[i].score >= pivot.score)) {
i++;
}
students[j] = students[i];
}
students[i] = pivot;
quickSort(students, left, i - 1, ascending);
quickSort(students, i + 1, right, ascending);
}
// 简单选择排序
void selectionSort(vector<Student>& students, bool ascending) {
for (int i = 0; i < students.size() - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < students.size(); j++) {
if ((ascending && students[j].score < students[minIndex].score)
|| (!ascending && students[j].score > students[minIndex].score)) {
minIndex = j;
}
}
if (minIndex != i) {
swap(students[i], students[minIndex]);
}
}
}
int main() {
int n;
cout << "请输入学生人数:";
cin >> n;
vector<Student> students(n);
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个学生的姓名和成绩:";
cin >> students[i].name >> students[i].score;
}
int choice;
cout << "请选择排序方式:\n";
cout << "1. 折半插入排序(从高到低)\n";
cout << "2. 折半插入排序(从低到高)\n";
cout << "3. 快速排序(从高到低)\n";
cout << "4. 快速排序(从低到高)\n";
cout << "5. 简单选择排序(从高到低)\n";
cout << "6. 简单选择排序(从低到高)\n";
cin >> choice;
switch (choice) {
case 1:
binaryInsertionSort(students, true);
break;
case 2:
binaryInsertionSort(students, false);
break;
case 3:
quickSort(students, 0, students.size() - 1, true);
break;
case 4:
quickSort(students, 0, students.size() - 1, false);
break;
case 5:
selectionSort(students, true);
break;
case 6:
selectionSort(students, false);
break;
default:
cout << "输入有误!" << endl;
return 0;
}
cout << "排序结果如下:" << endl;
for (int i = 0; i < students.size(); i++) {
cout << students[i].name << "\t" << students[i].score << endl;
}
return 0;
}
```
程序中定义了一个结构体 `Student`,包含学生姓名和成绩两个属性。使用 `vector` 存储学生信息。
折半插入排序、快速排序和简单选择排序三种排序算法都实现了从高到低和从低到高两种排序方式,通过 `bool` 类型的 `ascending` 参数控制排序方式。
程序先读入学生信息,然后让用户选择排序方式。根据用户的选择,调用相应的排序函数进行排序,并输出排序结果。
希望我的回答对您有所帮助!
阅读全文