天天看點

成績排序-多關鍵字

上文連結: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

繼續閱讀