题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b
#include <iostream> #include <vector> using namespace std; struct Student { string name; int score; }; void merge(vector<Student>& students, vector<Student>& temp, int left, int mid,int right, int sortOrder) { int i = left, j = mid+1, k = left; while (i <= mid && j <= right) { if ((sortOrder == 0 && students[i].score > students[j].score)|| (sortOrder == 1 && students[i].score < students[j].score)|| (students[i].score==students[j].score&&i<=mid)) { temp[k++] = students[i++]; } else { temp[k++] = students[j++]; } } while (i <= mid) temp[k++] = students[i++]; while (j <= right) temp[k++] = students[j++]; for (int t = left; t <= right; ++t) { students[t] = temp[t]; } } void mergeSort(vector<Student>& students, vector<Student>& temp, int left,int right, int sortOrder) { if (left < right) { int mid =(left + right) / 2; mergeSort(students, temp, left, mid, sortOrder); mergeSort(students, temp, mid + 1, right, sortOrder); merge(students, temp, left, mid, right, sortOrder); } } int main() { int n, sortOrder; cin >> n >> sortOrder; vector<Student> students(n); vector<Student> temp(n); for (int i = 0; i < n; ++i) { cin >> students[i].name >> students[i].score; } mergeSort(students, temp, 0, n - 1, sortOrder); for (const auto& student : students) { cout << student.name << " " << student.score << endl; } return 0; }