题解 | 成绩排序

成绩排序

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;
}

全部评论

相关推荐

04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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