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

