题解 | 成绩排序

成绩排序

https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1

#include<iostream>
#include<vector>
#include<string>
using namespace std;


class Stu { 
  public:
    string name;
    int rank;

    Stu(string n, int r) {
        this->name = n;
        this->rank = r;
    }
    Stu() {

    }
};

vector<Stu> tem(1000); //辅助数组
void mS(vector<Stu>& s, int l, int r, int order) { //归并排序
    if (l >= r)
        return;
    int mid = (l + r)>> 1;
    mS(s, l, mid, order);
    mS(s, mid + 1, r, order);
    int i = l, j = mid + 1, k = 0;

    while (i <= mid && j <= r) {
        if (order == 1) { //升序
            if (s[i].rank <= s[j].rank) {
                tem[k++] = s[i++];
            } else {
                tem[k++] = s[j++];

            }
        } else { //降序
            if (s[i].rank >= s[j].rank) {
                tem[k++] = s[i++];
            } else {
                tem[k++] = s[j++];

            }
        }


    }
    while (i <= mid)
        tem[k++] = s[i++];
    while (j <= r)
        tem[k++] = s[j++];

    for (int i = l, k = 0; i <= r; i++, k++) {
        s[i] = tem[k];
    }
}



int main() {
    int n, order;
    while (scanf("%d%d", &n, &order) != EOF) {
        vector<Stu> s;
        for (int i = 0; i < n; i++) {
            string name;
            int rank;
            cin >> name >> rank;
            s.push_back(Stu(name, rank));
        }

        mS(s, 0, s.size() - 1, order); 

        for (int i = 0; i < s.size(); i++) {
            cout << s[i].name << " " << s[i].rank << endl;
        }
    }

}

全部评论

相关推荐

程序员牛肉:你这简历有啥值得拷打的?在牛客你这种简历一抓一大把,也就是个人信息不一样而已。 关键要去找亮点,亮点啊,整个简历都跟流水线生产出来的一样。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务