给出含有n个学生的成绩表,每条记录由学号、姓名和分数组成,编写具体函数完成下列操作:设计一个菜单操作界面,实现录入学生基本信息,直接插入排序,折半插入排序,冒泡排序,快速排序,简单选择排序,输出学生信息,退出等基本操作.
时间: 2024-03-09 07:48:13 浏览: 51
好的,我可以为您提供一个基于C语言的实现,具体代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_STUDENT_NUM 100
struct Student {
char id[10];
char name[MAX_NAME_LEN];
int score;
};
void print_menu() {
printf("1. 录入学生信息\n");
printf("2. 直接插入排序\n");
printf("3. 折半插入排序\n");
printf("4. 冒泡排序\n");
printf("5. 快速排序\n");
printf("6. 简单选择排序\n");
printf("7. 输出学生信息\n");
printf("8. 退出\n");
}
void input_student_info(struct Student *students, int *num) {
printf("请输入学生信息(学号 姓名 分数,以空格隔开,输入exit结束):\n");
while (*num < MAX_STUDENT_NUM) {
char id[10], name[MAX_NAME_LEN];
int score;
scanf("%s", id);
if (strcmp(id, "exit") == 0) {
break;
}
scanf("%s %d", name, &score);
strcpy(students[*num].id, id);
strcpy(students[*num].name, name);
students[*num].score = score;
(*num)++;
}
}
void direct_insert_sort(struct Student *students, int num) {
int i, j;
for (i = 1; i < num; i++) {
struct Student tmp = students[i];
for (j = i - 1; j >= 0 && students[j].score > tmp.score; j--) {
students[j + 1] = students[j];
}
students[j + 1] = tmp;
}
}
void binary_insert_sort(struct Student *students, int num) {
int i, j;
for (i = 1; i < num; i++) {
struct Student tmp = students[i];
int left = 0, right = i - 1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (students[mid].score > tmp.score) {
right = mid - 1;
} else {
left = mid + 1;
}
}
for (j = i - 1; j >= left; j--) {
students[j + 1] = students[j];
}
students[left] = tmp;
}
}
void bubble_sort(struct Student *students, int num) {
int i, j;
for (i = 0; i < num - 1; i++) {
for (j = 0; j < num - i - 1; j++) {
if (students[j].score > students[j + 1].score) {
struct Student tmp = students[j];
students[j] = students[j + 1];
students[j + 1] = tmp;
}
}
}
}
int partition(struct Student *students, int left, int right) {
struct Student pivot = students[left];
while (left < right) {
while (left < right && students[right].score >= pivot.score) {
right--;
}
students[left] = students[right];
while (left < right && students[left].score <= pivot.score) {
left++;
}
students[right] = students[left];
}
students[left] = pivot;
return left;
}
void quick_sort(struct Student *students, int left, int right) {
if (left < right) {
int pivot = partition(students, left, right);
quick_sort(students, left, pivot - 1);
quick_sort(students, pivot + 1, right);
}
}
void select_sort(struct Student *students, int num) {
int i, j;
for (i = 0; i < num - 1; i++) {
int min_index = i;
for (j = i + 1; j < num; j++) {
if (students[j].score < students[min_index].score) {
min_index = j;
}
}
if (min_index != i) {
struct Student tmp = students[i];
students[i] = students[min_index];
students[min_index] = tmp;
}
}
}
void print_student_info(struct Student *students, int num) {
printf("学号\t姓名\t分数\n");
int i;
for (i = 0; i < num; i++) {
printf("%s\t%s\t%d\n", students[i].id, students[i].name, students[i].score);
}
}
int main() {
struct Student students[MAX_STUDENT_NUM];
int num = 0;
int choice;
do {
print_menu();
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_student_info(students, &num);
break;
case 2:
direct_insert_sort(students, num);
break;
case 3:
binary_insert_sort(students, num);
break;
case 4:
bubble_sort(students, num);
break;
case 5:
quick_sort(students, 0, num - 1);
break;
case 6:
select_sort(students, num);
break;
case 7:
print_student_info(students, num);
break;
case 8:
printf("谢谢使用!\n");
break;
default:
printf("无效的选择,请重新输入!\n");
break;
}
} while (choice != 8);
return 0;
}
```
该代码实现了录入学生信息、直接插入排序、折半插入排序、冒泡排序、快速排序、简单选择排序、输出学生信息和退出等基本操作。您可以运行该代码,根据菜单进行相应的操作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)