题解 | #成绩排序#
成绩排序
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;
}