📌  相关文章
📜  C程序,用于将学生记录存储为结构,并按年龄或ID对它们进行排序(1)

📅  最后修改于: 2023-12-03 15:14:26.626000             🧑  作者: Mango

C程序:学生记录排序

本程序用于将学生记录存储为结构,可按照年龄或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对其进行排序。程序包括了定义结构、排序函数和一个测试程序。可以通过这个程序学习结构的使用方法和排序算法的实现。