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 阅读(200) 评论(0) 编辑 收藏 举报