即条件排序问题,就要对cmp函数进行修改,我用了结构体来做的,可是运行时间比较大。
本人代码:
#include"iostream"
#include"iomanip"
#include"stdlib.h"
using namespace std;
typedef struct {
int x;
char y[10];
int z;
}node;
node xue[100001];
int c,i,n,m;
int cmp(const void*a,const void*b)
{
if(c==3&&(*(node*)a).z!=(*(node*)b).z) return (*(node*)a).z-(*(node*)b).z;
if(c==2&&strcmp((*(node*)a).y,(*(node*)b).y)) return strcmp((*(node*)a).y,(*(node*)b).y);
return (*(node*)a).x-(*(node*)b).x;
}
int main()
{
i=1;
while(cin>>n>>c&&n&&c)
{
cout<<"Case"<<' '<<i++<<":"<<endl;
for(int j=0;j<n;j++)
cin>>xue[j].x>>xue[j].y>>xue[j].z;
qsort(xue,n,sizeof(node),cmp);
for(int k=0;k<n;k++)
cout<<setw(6)<<setfill('0')<<xue[k].x<<' '<<xue[k].y<<' '<<xue[k].z<<endl;
}
return 0;
}
网上的我不知道为什么时间跟我的差了那么多?
代码:
#include <iostream>#include <string>
#include <algorithm>
#include <cstdio>
using namespace std;
int n,c,aa[100010][2],ref[100010],ca=0;
char ss[100010][10];
bool cmp(int a,int b)
{
if(c==3&&aa[a][1]!=aa[b][1])return aa[a][1]<aa[b][1];
if(c==2&&strcmp(ss[a],ss[b]))return strcmp(ss[a],ss[b])<0;
return aa[a][0]<aa[b][0];
}
int main()
{
while(cin>>n>>c&&n){
printf("Case %d:\n",++ca);
for(int i=0;i<n;++i)
cin>>aa[i][0]>>ss[i]>>aa[i][1],ref[i]=i;
sort(ref,ref+n,cmp);
for(int i=0;i<n;++i){
printf("%06d %s %d\n",aa[ref[i]][0],ss[ref[i]],aa[ref[i]][1]);
}
}
return 0;
}