现在的位置: 首页 > 综合 > 正文

EXCEL排序

2012年11月17日 ⁄ 综合 ⁄ 共 1327字 ⁄ 字号 评论关闭
#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;
} 

抱歉!评论已关闭.