结构体按列排序,我用了qsort的函数,主要就搞好三个comp函数就可以啦.这题还算简单辣,不知道为何通过率这么低.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define nLength 9
typedef struct studentInfo{
int id,grade; //6 digits
char name[nLength];
} *stuInfo,stuInfoNode;
int compId(const void *a,const void *b)
{
/*incrasing order*/
stuInfo m=(stuInfo)a,n=(stuInfo)b;
return m->id-n->id;
}
int compGrade(const void *a,const void *b)
{
/*non-decrasing order*/
stuInfo m=(stuInfo)a,n=(stuInfo)b;
if(m->grade==n->grade) return m->id-n->id;
else return m->grade-n->grade;
}
int compName(const void *a,const void *b)
{
/*non-decrasing order*/
stuInfo m=(stuInfo)a,n=(stuInfo)b;
if(strcmp(m->name,n->name)==0) return m->id-n->id;
else return strcmp(m->name,n->name);
}
int main()
{
int n,i,c;
stuInfo s;
scanf("%d %d",&n,&c);
s=(stuInfo)malloc(sizeof(stuInfoNode)*n);
for(i=0;i<n;i++)
scanf("%d %s %d",&s[i].id,s[i].name,&s[i].grade);
if(c==1) qsort(s,n,sizeof(stuInfoNode),compId);
else if(c==2) qsort(s,n,sizeof(stuInfoNode),compName);
else qsort(s,n,sizeof(stuInfoNode),compGrade);
for(i=0;i<n;i++)
printf("%06d %s %d\n",s[i].id,s[i].name,s[i].grade);
return 0;
}