hdu 1862

来源:互联网 发布:算法导论第三版4 2 编辑:程序博客网 时间:2024/06/05 06:03

水题。第一次用了插入排序结果超时,第二次换了希尔排序结果WA了(错在学号用的是int,输出用的是06d)换成char[]就过了。



#include <stdio.h>#include <string.h>#define N 100000struct student{char num[10];   //学号  原先用的intchar name[10];int score;}Excel[N];void Sort1(int);void Sort2(int);void Sort3(int);int main(void){int n,m,mark=0;while(scanf("%d%d",&n,&m)&&n){for(int i=0;i<n;++i)scanf("%s%s%d",Excel[i].num,Excel[i].name,&Excel[i].score);switch(m){case 1:Sort1(n);break;case 2:Sort2(n);break;case 3:Sort3(n);break;}printf("Case %d:\n",++mark);for(int i=0;i<n;++i)printf("%s %s %d\n",Excel[i].num,Excel[i].name,Excel[i].score);}return 0;}void swap(struct student *a,struct student *b){struct student t=*a;*a=*b;*b=t;}void Sort1(int n){for(int i=n/2;i>=1;i/=2)for(int j=i;j<n;++j)for(int k=j;k>=i&&strcmp(Excel[k].num,Excel[k-i].num)<0;k-=i)swap(&Excel[k],&Excel[k-i]);}void Sort2(int n){for(int i=n/2;i>=1;i/=2)for(int j=i;j<n;++j)for(int k=j;k>=i&&strcmp(Excel[k].name,Excel[k-i].name)<=0;k-=i)if(strcmp(Excel[k].name,Excel[k-i].name)==0){if(strcmp(Excel[k].num,Excel[k-i].num)<0)swap(&Excel[k],&Excel[k-i]);}elseswap(&Excel[k],&Excel[k-i]);}void Sort3(int n){for(int i=n/2;i>=1;i/=2)for(int j=i;j<n;++j)for(int k=j;k>=i&&Excel[k].score<=Excel[k-i].score;k-=i)if(Excel[k].score==Excel[k-i].score){if(strcmp(Excel[k].num,Excel[k-i].num)<0)swap(&Excel[k],&Excel[k-i]);}elseswap(&Excel[k],&Excel[k-i]);}


0 0