EXCEL排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
int l=1,N,M;
struct node
{
char stu[10];
char name[10];
int grade;
}T[100010];
int cmp1(const void *a,const void *b)
{
return strcmp((*(node *)a).stu,(*(node *)b).stu);
}
int cmp2(const void *a,const void *b)
{
if(strcmp((*(node *)a).name,(*(node *)b).name)==0)
return strcmp((*(node *)a).stu,(*(node *)b).stu);
else
return strcmp((*(node *)a).name,(*(node *)b).name);
}
int cmp3(const void *a,const void *b)
{
if((*(node *)a).grade!=(*(node *)b).grade)
return (*(node *)a).grade>(*(node *)b).grade?1:-1; //这里让我wa了好几次啊,多谢立哥。。没有>1:-1对零是不排序的。
else
return strcmp((*(node *)a).stu,(*(node *)b).stu);
}
void print1( )
{
int i;
qsort(T,N,sizeof(T[0]),cmp1);
//sort(T,T+N,cmp1);
printf("Case %d:\n",l++);
for(i=0;i<N;i++)
printf("%s %s %d\n",T[i].stu,T[i].name,T[i].grade);
}
void print2( )
{
int i;
qsort(T,N,sizeof(T[0]),cmp2);
//sort(T,T+N,cmp2);
printf("Case %d:\n",l++);
for(i=0;i<N;i++)
printf("%s %s %d\n",T[i].stu,T[i].name,T[i].grade);
}
void print3( )
{
int i;
//printf("Case %d:\n",l++);
qsort(T,N,sizeof(T[0]),cmp3);
//sort(T,T+N,cmp3);
printf("Case %d:\n",l++);
for(i=0;i<N;i++)
printf("%s %s %d\n",T[i].stu,T[i].name,T[i].grade);
}
int main( )
{
int i;
while(scanf("%d%d",&N,&M),N||M)
{
for(i=0;i<N;i++)
scanf("%s%s%d",&T[i].stu,&T[i].name,&T[i].grade);
switch(M)
{
case 1 : print1();break;
case 2 : print2();break;
case 3 : print3();break;
default : break;
}
}
return 0;
}
posted on 2011-05-03 20:48 more think, more gains 阅读(206) 评论(0) 收藏 举报
浙公网安备 33010602011771号