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