结构体排序

来源:互联网 发布:dota2天梯淘宝买账号 编辑:程序博客网 时间:2024/05/01 13:02

结构体多级排序的题目,用sortqsort都可以实现,

但是sort虽然比较简单,却比较慢,qsort则相反

sort使用方法

 

#include<stdio.h>

#include<string.h>

#include<algorithm>

using namespacestd;

 

typedef struct

{

       charno[8];

       charname[10];

       intscore;

}Node;

 

Nodeary[100000+3];

 

bool cmp1( Node a , Node b)

{

       returnstrcmp( a.no , b.no ) < 0 ;

}

 

bool cmp2( Node a , Node b)

{

       if(strcmp( a.name , b.name ) != 0 )

              returnstrcmp( a.name , b.name ) < 0 ;

       else

              returnstrcmp( a.no , b.no ) < 0 ;

}

 

bool cmp3( Node a , Node b)

{

       if(a.score != b.score )

              returna.score < b.score;

       else

              returnstrcmp( a.no , b.no ) < 0 ;

}

 

int main()

{

       intn,c;

       intt = 1;

 

       while(scanf( "%d%d" , &n , &c )&& n )

       {

              for(int i = 0 ; i < n ; i++ )

                     scanf("%s%s%d" , ary[i].no , ary[i].name , &ary[i].score);

 

              if(c == 1 )

                     sort(ary , ary+n , cmp1);

              elseif( c == 2 )

                     sort(ary , ary+n , cmp2);

              elseif( c == 3 )

                     sort(ary , ary+n , cmp3);

 

              printf("Case %d:\n" , t++ );

              for(i = 0 ; i < n ; i++ )

                     printf("%s %s %d\n" , ary[i].no , ary[i].name , ary[i].score);

       }

       return1;

}

 

 

 

 

qsort使用方法

 

 

 

 

#include<iostream>

//#include<algorithm>

#include<cstdlib>

#include<string>

using namespacestd;

typedef struct

{

    charno[8];

    charname[10];

    intscore;

}node;

nodearray[100003];

 

int comp1(constvoid *a,const void*b)

{

    returnstrcmp((*(node*)a).no,(*(node*)b).no);

}

 

int comp2(const void *a,constvoid *b)

{

    if(strcmp((*(node*)a).name,(*(node*)b).name))

    returnstrcmp((*(node*)a).name,(*(node*)b).name);

    returnstrcmp((*(node*)a).no,(*(node*)b).no);

}

 

int comp3(constvoid *a,constvoid *b)

{

    if((*(node*)a).score!=(*(node*)b).score)

     return(*(node*)a).score>(*(node*)b).score?1:-1;

    returnstrcmp((*(node*)a).no,(*(node*)b).no);

}

 

int main()

{

    intn,c,j=1;

    while(cin>>n>>c&&n)

    {

        for(inti=0; i<n; i++)

            cin>>array[i].no>>array[i].name>>array[i].score;

        switch(c)

        {

        case1:

            qsort(array,n,sizeof(array[0]),comp1);

            break;

        case2:

            qsort(array,n,sizeof(array[0]),comp2);

            break;

        case3:

            qsort(array,n,sizeof(array[0]),comp3);

            break;

        }

        cout<<"Case"<<j++<<":"<<endl;

        for(i=0;i<n; i++)

            cout<<array[i].no<<""<<array[i].name<<""<<array[i].score<<endl;

    }

    return1;

}

0 0
原创粉丝点击