排名的实现

很多排序题目会要求在排序之后计算出每个个体的排名,而且一般规则都是:
分数不同的排名不同,分数相同的排名相同但占用一个排位!
举个简单的例子:有五位同学的分数分别为91、90、90、90、90、89,那么对应的排名应该是1、2、2、2、2、5。
此种情况,一般都要在结构体中进行类型定义的时候需要将排名信息加入到结构体中。因此在数组排完序后就有以下两种方法来实现排名的计算:

1.先将数组第一个个体(设数组下标从0开始)的排名记为1,然后遍历剩余的个体。如果当前的个体的分数等于上一个个体的分数,那么当前个体的排名就等于上一个个体的排名;否则,当前的个体的排名就等于其数据下标加一。相应的代码:

student[0].rank = 1;
for(int i=1;i<n;i++){
    if(student[i].score != student[i-1].score)
        student[i].rank = student[i-1].rank;
    else
        student[i].rank = i + 1;
}

2.有些题目并不需要记录下排名信息,而是直接输出就可以,那么有这样的方法:
设置一个int型变量,如rank = 1,然后遍历所有的个体:如果当前个体不是第一个个体且当前个体的分数不等于上一个个体的分数,那么令rank等于数据下标加一,此时的rank就是当前个体的排名,直接输出。
这种做法适合信息量较大,而且只需要输出排名信息,不记录排名信息!相应的代码:

int rank = 1;
for(int i=0;i<n;i++){
    if(rank > 0 && student[i].score != student[i-1].score)
        rank = i + 1;
    //输出当前个体信息,或者令student[i].rank = rank;
}
posted @ 2021-07-16 23:03  AI未来10Y  阅读(59)  评论(0编辑  收藏  举报