具有多项属性的冒泡排序,不使用重载功能

#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
//姓名 年龄 和 成绩


struct node
{
        char name[20];
        int age;
        int grade;
}buf[100];


bool cmp( node a,node b)
{
        if(a.grade!=b.grade)
        {
                return a.grade<b.grade;
        }
        int tag=strcmp(a.name,b.name);
        if (tag<0)return true;
        return a.age<b.age;
}


int a[100];
void init()
{
        for(int i=0;i<100;i++)
                a[i]=i;
}


int main()
{


        int n;
        scanf("%d",&n);
        init();
        for(int i=0;i<n;i++)
        {
                 scanf("%s%d%d",buf[i].name,&buf[i].age,&buf[i].grade);
        }
                /*for(int i=0;i<n;i++)
        {
                printf("%s%d%d",buf[i].name,&buf[i].age,&buf[i].grade);
        }*/
       for(int i=0;i<n;i++)
       {
               for(int j=0;j<n-i-1;j++)//a[j]baocun de shi suoyin
               {
                        if(cmp(buf[a[j]],buf[a[j+1]]))
                        {
                                int tmp=a[j+1];
                                a[j+1]=a[j];
                                a[j]=tmp;
                        }
               }


       }
            for(int i=0;i<n;i++)
            {
                printf("%s %d %d\n",buf[a[i]].name,buf[a[i]].age,buf[a[i]].grade);




            }


        return 0;
}
/*5
wang 19 100
wang1 18 90
huang 20 100
yin 21 98
qian 22 88*/

运行结果:


猜你喜欢

转载自blog.csdn.net/qq_34552393/article/details/80960160
今日推荐