即条件排序问题,就要对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;
}

posted on 2012-05-25 00:17  xinmenghuairi  阅读(191)  评论(0编辑  收藏  举报