#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 100000
#define MAXID 6
#define MAXNAME 8
struct Student{
char id[MAXID+1];
char name[MAXNAME+1];
int grade;
}Record[MAXN];
int ComparId(const void *a,const void *b);
int ComparName(const void *a,const void *b);
int ComparGrade(const void *a,const void *b);
int main(void)
{
int i,N,C;
scanf("%d %d",&N,&C);
for (i=0;i<N;i++)
scanf("%s %s %d",Record[i].id,Record[i].name,&Record[i].grade);
switch(C)
{
case 1:qsort(Record,N,sizeof(struct Student),ComparId);
break;
case 2:qsort(Record,N,sizeof(struct Student),ComparName);
break;
case 3:qsort(Record,N,sizeof(struct Student),ComparGrade);
break;
}
for (i=0;i<N;i++)
printf("%s %s %d\n",Record[i].id,Record[i].name,Record[i].grade);
return 0;
}
int ComparId(const void *a,const void *b)
{
return strcmp(((const struct Student*)a)->id,((const struct Student*)b)->id);
}
int ComparName(const void *a,const void *b)
{
int k;
k=strcmp(((const struct Student*)a)->name,((const struct Student*)b)->name);
if (!k)
k=strcmp(((const struct Student*)a)->id,((const struct Student*)b)->id);
return k;
}
int ComparGrade(const void *a,const void *b)
{
int k;
k=((const struct Student*)a)->grade-((const struct Student*)b)->grade;
if (!k)
k=strcmp(((const struct Student*)a)->id,((const struct Student*)b)->id);
return k;
}
stdlib.h中的qsort函数采用了优化实现的快速排序算法,其调用格式为:qsort(数组名,元素个数,sizeof(数组元素类型),比较大小的函数); 其中用于比较大小的函数由用户自行定义,该函数接受两个指向待比较元素的指针*a和*b,返回一个整数。当要求按递增排序时,返回正数表示*a的分量比*b的大、负数反之、0表示相等