题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

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

/*快速排序法,并用index变量保持排序稳定性*/
typedef struct Student {
    int index;
    int score;
    char name[32];
} student;

int inc(const void* a, const void* b) {
    int result = (**(student**)a).score - (**(student**)b).score;
    if(result==0)
        return (**(student**)a).index - (**(student**)b).index;
    else
        return result;
}

int dcr(const void* a, const void* b) {
    int result = (**(student**)b).score - (**(student**)a).score;
    if(result==0)
        return (**(student**)a).index - (**(student**)b).index;
    else
        return result;
}

int main() {
    int i, j, dir, nums;
    student** pStud, tempstud;

    scanf("%d", &nums);
    pStud = (student**)malloc(sizeof(student*)*nums);
    scanf("%d", &dir);

    for (i = 0; i < nums; i++) {
        pStud[i] = (student*)malloc(sizeof(student) * 1);
        scanf("%s %d", (pStud[i]->name), &(pStud[i]->score));
        pStud[i]->index=i;
    }

    if(dir)
        qsort(pStud,nums,sizeof(student *),inc);
    else
        qsort(pStud,nums,sizeof(student *),dcr);

    for (i = 0; i < nums; i++) {
        printf("%s %d\r\n", pStud[i]->name, pStud[i]->score);
    }

    for(i=0;i<nums;i++)
        free(pStud[i]);

    free(pStud);

    return 0;
}

#成绩排序#
全部评论
点赞 回复 分享
发布于 2024-12-06 10:22 北京

相关推荐

神哥了不得:(非引流)先把你的个人信息打码一下吧,看了几万份的简历,让我不知道该怎么说
点赞 评论 收藏
分享
工科女的日常:真诚建议:别再用这种花哨的模板,可以看看我发的那个零经验找实习发帖子
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务