算法基础——排序——排序题与sort函数的应用

排序题型的常用解题步骤

1. 相关结构体的定义

对排序题,一定会在题目中给出个体许多信息,例如学生有姓名、准考证号、分数、排名等信息。为方便编写代码,常常将它们保存到一个结构体中,然后用结构体数组来表示多个个体。例如:

struct Student{
    char name[10];
    char id[10];
    int score;
    int r;
}stu[100010];

2. cmp 函数的编写

二级排序示例:

对所有学生先按分数从高到低排序,分数相同的按姓名的字典序从小到大排序。

等价表述:

① 如果两个学生分数不相同,分数高的排在前面

② 分数相同,姓名字典序小的排在前面

bool cmp(Student a, Student b){
    if(a.score != b.score)
        return a.score > b.score;
    else
        return strcmp(a.name, b.name) < 0;
}

3. 排名的实现

一般规则:分属不同的排名不同,分数相同的排名相同 但 占用一个排位。

例如,五个学生分数为:90 88 88 88 86,那么排名分别是 1 2 2 2 5

对这种要求,一般需要在结构体类型定义 时 就把 排名 这一项加到结构体中。

① 先将数组第一个个体的排名记为1,然后遍历剩余个体。

如果  当前个体分数  等于  上一个个体的分数,那么  当前个体的排名  等于  上一个个体的排名,

否则,当前个体排名  等于 数组下标 加 1 

str[0].r = 1;
for(int i = 1; i < n; i++){
    if(stu[i].score == stu[i-1].score)
        stu[i].r = stu[i-1].r;
    else
        stu[i].r = i + 1;
}

——摘抄自《算法笔记》

猜你喜欢

转载自blog.csdn.net/gsj9086/article/details/86654746
今日推荐