跳至正文

奖学金 解题报告

这是个水题,我直接使用了库函数qsort进行了排序,然后输出前五个就可以了,唯一想要说的就是明天或后天把Glibc中的qsort代码看下,学习一下是怎么对超级巨大的数据量进行快速排序的,一个个交换肯定不是,这些都明天再说吧。

#include <stdio.h>
#include <stdlib.h>
#define MAX 300
struct grade{
 int a, b, c;
 int id;
}totle[MAX];
int compare(const void *a, const void *b)
{
 struct grade i = *(struct grade *)a, j = *(struct grade *)b;
 int sum1 = i.a + i.b + i.c,
 sum2 = j.a + j.b + j.c;
 if(sum1 == sum2){
 if(i.a == j.a){
 return i.id - j.id;
 }
 return j.a - i.a;
 }
 return sum2 - sum1;
}

int main(void)
{
 int i;
 int n;
 scanf(%d, &n);
 for(i = 0; i < n; i++){
 totle[i].id = i + 1;
 scanf(%d%d%d, &totle[i].a, &totle[i].b, &totle[i].c);
 }
 qsort(totle, n, sizeof(struct grade), compare);
 for(i = 0; i < 5; i++){
 printf(%d %d\\n, totle[i].id, totle[i].a + totle[i].b +
 totle[i].c);
 }
 return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注