按成绩从高到低或从低到高,遍历所有同学,不需要先排序。
#include"stdio.h"
#include"string.h"

int main(void) {
    int i, j, flag = 0, n = 0, max = 0, min = 0;
    char name[200][32] = {0};
    int num[200] = {0};
    scanf("%d", &n);
    scanf("%d", &flag);

    for (i = 0; i < n; i++) {
        scanf("%s %d", name[i], &num[i]);
        if (num[i] > max) {
            max = num[i];
        }
        if (num[i] < min) {
            min = num[i];
        }
    }

    if (flag == 0) {
        for (i = max; i >= min; i--) {
            for (j = 0; j < n; j++) {
                if (num[j] == i) {
                    printf("%s %d\n", name[j], num[j]);
                }
            }
        }
    } else {
        for (i = min; i <= max; i++) {
            for (j = 0; j < n; j++) {
                if (num[j] == i) {
                    printf("%s %d\n", name[j], num[j]);
                }
            }
        }

    }

    return 0;
}