📅  最后修改于: 2023-12-03 15:14:26.626000             🧑  作者: Mango
本程序用于将学生记录存储为结构,可按照年龄或ID对其进行排序。以下是详细介绍。
以下是我们将会使用到的结构体定义:
struct student {
int id;
char name[50];
int age;
float score;
};
我们定义了一个名为student
的结构体,包括学生的ID、姓名、年龄以及成绩。
我们需要编写两个函数,用于按照年龄或ID对学生记录进行排序。以按照年龄排序为例,我们定义一个如下的排序函数:
void sort_by_age(struct student s[], int n) {
int i, j;
struct student temp;
for(i = 0; i < n - 1; i++) {
for(j = 0; j < n - i - 1; j++) {
if(s[j].age > s[j + 1].age) {
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
}
该函数接收一个student
类型的数组S
和数组的长度n
,将会将数组按照年龄从小到大进行排序。具体实现为一个嵌套的循环,每次比较相邻两个元素的年龄,如果需要交换则进行交换。该函数的时间复杂度为$O(n^2)$。
同样的,我们还可以编写一个按照ID排序的函数,如下所示:
void sort_by_id(struct student s[], int n) {
int i, j;
struct student temp;
for(i = 0; i < n - 1; i++) {
for(j = 0; j < n - i - 1; j++) {
if(s[j].id > s[j + 1].id) {
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
}
同样是一个嵌套的循环,每次比较相邻两个元素的ID,如果需要交换则进行交换。时间复杂度也是$O(n^2)$。
以下是一个示例程序,用于测试我们编写的排序函数:
#include <stdio.h>
int main() {
struct student students[5];
int i;
for(i = 0; i < 5; i++) {
scanf("%d %s %d %f", &students[i].id, students[i].name, &students[i].age, &students[i].score);
}
sort_by_age(students, 5);
printf("Sorted by age:\n");
for(i = 0; i < 5; i++) {
printf("%d %s %d %.2f\n", students[i].id, students[i].name, students[i].age, students[i].score);
}
sort_by_id(students, 5);
printf("Sorted by ID:\n");
for(i = 0; i < 5; i++) {
printf("%d %s %d %.2f\n", students[i].id, students[i].name, students[i].age, students[i].score);
}
return 0;
}
我们首先读入五个学生的记录,然后分别用按照年龄和ID排序的方法对学生进行排序,并输出排序结果。可以通过这个程序测试我们编写的排序函数的正确性。
本程序用于将学生记录存储为结构,并按照年龄或ID对其进行排序。程序包括了定义结构、排序函数和一个测试程序。可以通过这个程序学习结构的使用方法和排序算法的实现。