HJ68 成绩排序

描述

给定一些同学的信息(名字,成绩)序列,请你将他们的信息按照成绩从高到低或从低到高的排列,相同成绩 

都按先录入排列在前的规则处理。 

例示:
jack      70
peter     96
Tom       70
smith     67 

从高到低  成绩 
peter     96 
jack      70 
Tom       70 
smith     67 

从低到高 

smith     67 

jack      70 

Tom       70 

peter     96 

注:0代表从高到低,1代表从低到高 

数据范围:人数:1≤n≤200 1≤n≤200 

进阶:时间复杂度:O(nlogn) O(nlogn) ,空间复杂度:O(n) O(n) 

输入描述:

第一行输入要排序的人的个数n,第二行输入一个整数表示排序的方式,之后n行分别输入他们的名字和成绩,以一个空格隔开

输出描述:

按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

示例1

输入:

3
0
fang 90
yang 50
ning 70

复制输出:

fang 90
ning 70
yang 50

复制

示例2

输入:

3
1
fang 90
yang 50
ning 70

复制输出:

yang 50
ning 70
fang 90
#include 
#include
#include
#include
using namespace std;

//选出最小
void  selectSort(vector A, int n, vector name) {
    for (int i = 1; i <= n; i++) {
        int k = i;
        for (int j = i; j <= n; j++) {
            if (A[j] < A[k]) {
                k = j;
            }
        }
        string temp = A[i];
        string tempName = name[i];
        A[i] = A[k];
        name[i] = name[k];
        A[k] = temp;
        name[k] = tempName;
    }
}
//  选出最大
void selectSort2(vector A, int n, vector name) {
    for (int i = 1; i <= n; i++) {
        int k = i;
        for (int j = i; j <= n; j++) {
            if (A[j] > A[k]) {
                k = j;
            }
        }
        string temp = A[i];
        string tempName = name[i];
        A[i] = A[k];
        name[i] = name[k];
        A[k] = temp;
        name[k] = tempName;
    }
}

int main() {
    int n;
    int method;
    string name;
    string score;
    
    vector scores;
    vector namearry;
    vector > group;
    while (cin >> n >> method) {
        for (int i = 0; i < n; i++) {
            cin >> name;
            scores.push_back(name);
            cin >> score;
            scores.push_back(score);
            group.push_back(scores);
        }
        if (method == 0) {
            //降序
            scores.clear();
            for (int i = 0; i < group.size(); i++) {
                namearry[i] = group[i][1];
                scores[i] = group[i][0];
            }
            selectSort(scores, group.size(), namearry);
            for (int j = 0; j < group.size(); j++) {
                cout << namearry[j] << " " << scores[j] << endl;
            }

        } else if (method == 1) {
            //升序
            scores.clear();
            namearry.clear();
            for (int i = 0; i < group.size(); i++) {
                namearry[i] = group[i][1];
                scores[i] = group[i][0];
            }
            selectSort2(scores, group.size(), namearry);
            for (int j = 0; j < group.size(); j++) {
                cout << namearry[j] << " " << scores[j] << endl;
            }
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

你可能感兴趣的:(牛客网华为机试,算法,数据结构)