#include <iostream>
#include <ostream>
using namespace std;

//倒序输入,倒序输出
void bubble_sort01(int* score, int* name, int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (score[j] < score[j + 1]) {
                swap(score[j], score[j + 1]);
                swap(name[j],name[j+1]);
            }
        }
    }
}

//正序输入,正序输出
void bubble_sort02(int* score, int* name, int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (score[j] > score[j + 1]) {
                swap(score[j], score[j + 1]);
                swap(name[j],name[j+1]);
            }
        }
    }
}

int score[105];
int name[105];

int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        for(int k=0;k<n;k++){
            cin>>name[k]>>score[k];
        }

        if(n>1 && name[0]<name[1]){
            bubble_sort02(score, name,n);
            for(int k=0;k<n;k++){
                cout<<name[k]<<" "<<score[k]<<endl;
            }
        }

        if(n>1 && name[0]>name[1]){
            bubble_sort01(score, name,n);
            for(int k=n-1;k>=0;k--){
                cout<<name[k]<<" "<<score[k]<<endl;
            }
        }
         
        if(n==1)cout<<name[0]<<" "<<score[0]<<endl;

    }
}
// 64 位输出请用 printf("%lld")

解题思路:没有用到结构体;用了普通的排序算法,因为要保证学号顺序不能乱,因此需要用一个稳定的排序算法,我是用的冒泡排序;

关键点:题目要求按成绩从小到大的顺序输出;如果成绩相同,则按照学号的大小进行从小到大排序;此处就会分两种情况:

输入是按学号升序输入的:直接按照成绩的升序排序,然后正常输出即可;

输入是按学号降序输入的:此时如果你按照成绩的升序排序的话,相同成绩的学号顺序是从大到小的,与题目要求正好相反;因此需要采用降序排序,然后输出数组时从后往前输出;

注意⚠️:冒泡排序中,第一层循环是从0到n-1;第二层循环是从0到n-1-i;

建议掌握(会默写)至少两种排序算法,一种稳定的例如冒泡,一种速度比较快的快排(但不稳定);

归并排序是又快有稳定的;