题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

#include <bits/stdc++.h>
using namespace std;

void mergesort(vector<pair<int,string>>& nums, int l, int r, bool asc){
    if(l >= r) return;
    int mid = l + r >> 1;
    mergesort(nums, l, mid, asc);
    mergesort(nums, mid+1, r, asc);
    vector<pair<int,string>> t(r-l+1);
    int x = l, y = mid+1;
    for(int i = 0; i < t.size(); ++i){
        if(y > r){
            t[i] = nums[x++]; continue;
        }
        if(x > mid){
            t[i] = nums[y++];continue;
        }
        if(asc){
            if(nums[x].first <= nums[y].first)
                t[i] = nums[x++];
            else
                t[i] = nums[y++];
        }
        else{
            if(nums[x].first >= nums[y].first)
                t[i] = nums[x++];
            else
                t[i] = nums[y++];
        }
    }
    copy(t.begin(),t.end(),nums.begin()+l);
}
int main() {
    int n,flag;
    cin>>n>>flag;
    vector<pair<int,string>> grades(n);
    for(auto & x : grades){
        string name;
        int grade;
        cin>>name>>grade;
        x = make_pair(grade,name);
    }
    
    mergesort(grades, 0, n-1, flag);

    for(auto & x : grades) cout<<x.second<<' '<<x.first<<endl;

    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务