题解 | #成绩排序#

成绩排序

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;
}

全部评论

相关推荐

02-18 21:55
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务