C++代码: 学生宿舍管理系统 直接插入排序~折半插入排序~希尔排序~完成按序号排序
时间: 2023-10-23 12:14:35 浏览: 102
以下是一个简单的学生宿舍管理系统的C++代码,包括直接插入排序、折半插入排序、希尔排序以及按序号排序的实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
// 学生信息结构体
struct Student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
};
// 直接插入排序
void insertSort(Student arr[], int n) {
for (int i = 1; i < n; i++) {
Student temp = arr[i];
int j = i - 1;
while (j >= 0 && arr[j].id > temp.id) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
// 折半插入排序
void binaryInsertSort(Student arr[], int n) {
for (int i = 1; i < n; i++) {
Student temp = arr[i];
int left = 0, right = i - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid].id > temp.id) {
right = mid - 1;
} else {
left = mid + 1;
}
}
for (int j = i - 1; j >= left; j--) {
arr[j + 1] = arr[j];
}
arr[left] = temp;
}
}
// 希尔排序
void shellSort(Student arr[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
Student temp = arr[i];
int j = i - gap;
while (j >= 0 && arr[j].id > temp.id) {
arr[j + gap] = arr[j];
j -= gap;
}
arr[j + gap] = temp;
}
}
}
// 按序号排序
void sortByNumber(Student arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i].id > arr[j].id) {
Student temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main() {
// 初始化学生信息
Student stuArr[5] = {{2, "Tom", 20}, {4, "Lucy", 19}, {1, "Jack", 22}, {5, "Lily", 21}, {3, "Bob", 18}};
// 直接插入排序
cout << "直接插入排序结果:" << endl;
insertSort(stuArr, 5);
for (int i = 0; i < 5; i++) {
cout << "学号:" << stuArr[i].id << " 姓名:" << stuArr[i].name << " 年龄:" << stuArr[i].age << endl;
}
// 折半插入排序
cout << "折半插入排序结果:" << endl;
binaryInsertSort(stuArr, 5);
for (int i = 0; i < 5; i++) {
cout << "学号:" << stuArr[i].id << " 姓名:" << stuArr[i].name << " 年龄:" << stuArr[i].age << endl;
}
// 希尔排序
cout << "希尔排序结果:" << endl;
shellSort(stuArr, 5);
for (int i = 0; i < 5; i++) {
cout << "学号:" << stuArr[i].id << " 姓名:" << stuArr[i].name << " 年龄:" << stuArr[i].age << endl;
}
// 按序号排序
cout << "按序号排序结果:" << endl;
sortByNumber(stuArr, 5);
for (int i = 0; i < 5; i++) {
cout << "学号:" << stuArr[i].id << " 姓名:" << stuArr[i].name << " 年龄:" << stuArr[i].age << endl;
}
return 0;
}
```
以上代码中,我们先定义了一个学生信息的结构体 `Student`,包含学号、姓名、年龄三个属性。然后我们实现了直接插入排序、折半插入排序、希尔排序和按序号排序四种排序方法,并在 `main` 函数中分别用这四个方法对一个学生信息数组进行排序并输出结果。
阅读全文