天天看点

成绩排序-多关键字

上文链接:https://blog.csdn.net/slient_love/article/details/104277371

成绩排序-多关键字

题目描述

用一维数组存储学号和成绩,然后,按成绩排序输出。

输入描述:
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
输出描述:
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。 如果学生的成绩相同,则按照学号的大小进行从小到大排序。
示例:

输入:

3
1 90
2 87
3 92
           

输出:

2 87
1 90
3 92
           
做题思路:

对这种根据两个关键字进行排序的题,最好的方法就是定义结构体,然后利用

STL

中自带的sort函数对元素进行排序,要使用此函数只需引用

#include <algorithm>

即可。

代码展示:
#include <iostream>
#include <algorithm>
using namespace std;

struct node{
    int p;
    int q;
};

bool comp(node a,node b){
    if(a.q==b.q){
        return a.p<b.p;
    }else{
        return a.q<b.q;
    }
}

int main()
{
    int n;
    cin>>n;
    node a[n];
    for(int i=0;i<n;i++){
        cin>>a[i].p;
        cin>>a[i].q;
    }

    sort(a,a+n,comp);

    for(int i=0;i<n;i++){
        cout << a[i].p<<" "<<a[i].q << endl;
    }

    return 0;
}

           
知识拓展:

sort()排序函数用法:

sort(first_pointer,first_pointer+n,cmp)

参数1:第一个参数是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。

参数2:第二个参数即首地址加上数组的长度n(代表尾地址的下一地址)。

参数3:默认可以不填,如果不填sort会默认按数组升序排序。也可以自定义一个排序函数,改排序方式为降序什么的。

例如:

bool compare(int a,int b)
{
return a<b; //升序排列,如果改为return a>b,则为降序
}
           

下文链接:https://blog.csdn.net/slient_love/article/details/104310092

继续阅读