题解 | 成绩排序

成绩排序

https://www.nowcoder.com/practice/3f27a0a5a59643a8abf0140b9a8cf1f7

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int ID;
    int score;
}Grade;

void printGrade(Grade g);
void sort(Grade*grade,int l,int r);
void swap(Grade*a,Grade*b);
int compare(Grade*a,Grade*b);

int main() {
    int n;
    scanf("%d",&n);
    Grade*grade=(Grade*)malloc(n*sizeof(Grade));
    for(int i=0;i<n;i++)scanf("%d %d",&grade[i].ID,&grade[i].score);
    sort(grade,0,n-1);
    for(int i=0;i<n;i++)printGrade(grade[i]);
    return 0;
}

void sort(Grade*grade,int l,int r){
    if(l>=r) return;
    int i=l,j=r;
    Grade*pivot=grade+l;
    while(j>i){
        while(i<=j&&!compare(grade+i,pivot)) i++;
        while(j>=i&&compare(grade+j,pivot)) j--;
        if(i<j) swap(grade+i,grade+j);
    }
    swap(pivot,grade+j);
    sort(grade,l,j-1);
    sort(grade,j+1,r);
}

void printGrade(Grade g){
    printf("%d %d\n",g.ID,g.score);
}

void swap(Grade*a,Grade*b){
    int tempID=a->ID;
    int tempScore=a->score;
    a->ID=b->ID;a->score=b->score;
    b->ID=tempID;b->score=tempScore;
}

int compare(Grade*a,Grade*b){
    int result;
    if(a->score>b->score) result=1;
    else if(a->score<b->score) result=0;
    else if(a->ID>b->ID) result=1;
    else  result=0;
    return result;
}

全部评论

相关推荐

现在才开始投还有可能吗😭😭😭
牛客621925249号:开秋招了已经
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
mjasjon:这种trash中厂 简历过筛概率比大厂还低(除阿里系)
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务