C++给出含有n个学生的成绩表,每条记录由学号、姓名和分数组成,编写具体函数完成下列操作:设计一个菜单操作界面,实现录入学生基本信息,直接插入排序,折半插入排序,冒泡排序,快速排序,简单选择排序,输出学生信息,退出等基本操作
时间: 2024-03-19 17:46:13 浏览: 67
好的,我可以为你提供一个简单的C++代码实现,实现上述的功能。以下是代码:
```c++
#include<iostream>
#include<cstring>
using namespace std;
//定义学生结构体
struct Student{
string id;
string name;
int score;
};
//录入学生信息
void input(Student arr[], int n){
for(int i=0; i<n; i++){
cout<<"请输入第"<<i+1<<"个学生的学号、姓名和分数:"<<endl;
cin>>arr[i].id>>arr[i].name>>arr[i].score;
}
}
//输出学生信息
void output(Student arr[], int n){
for(int i=0; i<n; i++){
cout<<"学号:"<<arr[i].id<<" 姓名:"<<arr[i].name<<" 分数:"<<arr[i].score<<endl;
}
}
//直接插入排序
void insertSort(Student arr[], int n){
for(int i=1; i<n; i++){
if(arr[i].score<arr[i-1].score){
Student temp = arr[i];
int j=i-1;
while(j>=0 && arr[j].score>temp.score){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
}
//折半插入排序
void binaryInsertSort(Student arr[], int n){
for(int i=1; i<n; i++){
if(arr[i].score<arr[i-1].score){
Student temp = arr[i];
int low=0, high=i-1;
while(low<=high){
int mid = (low+high)/2;
if(arr[mid].score>temp.score){
high = mid-1;
}
else{
low = mid+1;
}
}
for(int j=i-1; j>=high+1; j--){
arr[j+1] = arr[j];
}
arr[high+1] = temp;
}
}
}
//冒泡排序
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--;
}
if(i<j){
arr[i] = arr[j];
i++;
}
while(i<j && arr[i].score<=pivot.score){
i++;
}
if(i<j){
arr[j] = arr[i];
j--;
}
}
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 minIndex = i;
for(int j=i+1; j<n; j++){
if(arr[j].score<arr[minIndex].score){
minIndex = j;
}
}
if(minIndex!=i){
swap(arr[i], arr[minIndex]);
}
}
}
//菜单操作界面
void menu(Student arr[], int n){
int choice;
do{
cout<<"\n\n**********学生信息管理系统**********\n"<<endl;
cout<<"1. 录入学生信息"<<endl;
cout<<"2. 直接插入排序"<<endl;
cout<<"3. 折半插入排序"<<endl;
cout<<"4. 冒泡排序"<<endl;
cout<<"5. 快速排序"<<endl;
cout<<"6. 简单选择排序"<<endl;
cout<<"7. 输出学生信息"<<endl;
cout<<"8. 退出"<<endl;
cout<<"\n*************************************\n"<<endl;
cout<<"请输入你的选择:"<<endl;
cin>>choice;
switch(choice){
case 1:
input(arr,n);
break;
case 2:
insertSort(arr,n);
break;
case 3:
binaryInsertSort(arr,n);
break;
case 4:
bubbleSort(arr,n);
break;
case 5:
quickSort(arr,0,n-1);
break;
case 6:
selectSort(arr,n);
break;
case 7:
output(arr,n);
break;
case 8:
cout<<"谢谢使用!"<<endl;
break;
default:
cout<<"输入有误,请重新输入!"<<endl;
break;
}
}while(choice!=8);
}
int main(){
int n;
cout<<"请输入学生的数量:"<<endl;
cin>>n;
Student arr[n];
menu(arr,n);
return 0;
}
```
以上是一个简单的C++代码实现,可以完成你所需的基本操作。你可以根据需要进行修改和优化。
阅读全文