首页 > 解决方案 > 在 C 中考虑 3 个参数对链表进行排序的通用方法

问题描述

我有这个结构的简单链表:

typedef struct exam {
    char name[100];
    int credits;
    int grade;
    struct exam* next;
} Exam;

我想按字典顺序对它进行排序,考虑到:名称按字母顺序排序,学分和等级按新月方式排序

学分和成绩都是正数,可以假设任何所需的数字。

你会怎么做?

谢谢!

标签: c

解决方案


您需要按优先级顺序比较每个字段并基于此分配顺序。例如:

int cmp_examp(Exam *e1, Exam *e2)
{
    if (strcmp(e1->name, e2->name) < 0) {
        return -1;
    } else if (strcmp(e1->name, e2->name) > 0) {
        return 1;
    } else if (e1->credits < e2->credits) {
        return -1;
    } else if (e1->credits > e2->credits) {
        return 1;
    } else if (e1->grade < e2->grade) {
        return -1;
    } else if (e1->grade > e2->grade) {
        return 1;
    } else {
        return 0;
    }
}

这首先按名称排序考试,然后按学分,然后按等级。


推荐阅读