题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/3f27a0a5a59643a8abf0140b9a8cf1f7

#include <iostream>
#include <algorithm>
using namespace std;

int Partition(int A[], int B[], int low, int high) {
    int pivot = A[low];
    int pivot2 = B[low];

    while (low < high) {
        while (low < high && A[high] >= pivot)     high--;
        A[low] = A[high];
        B[low] = B[high];

        while (low < high && A[low] <= pivot)      low++;
        A[high] = A[low];
        B[high] = B[low];
    }
    A[low] = pivot;
    B[low] = pivot2;
    return low;
}

void Qsort(int A[], int B[], int low, int high) {
    if (low < high) {
        int pivotpos = Partition(A, B, low, high);
        Qsort(A, B, low, pivotpos - 1);
        Qsort(A, B, pivotpos + 1, high);
    }
}

void SameSort(int A[], int B[], int size) {
    int count = 1;
    int current = A[0];
    int start = 0;  //相同成绩区段

    for (int i = 1; i <= size; i++) {
        if (A[i] != current) {
            if (count != 1) sort(B + start, B + i);
            count = 1;
            start = i;
            current = A[i];
        } else count++;
    }
}

int main() {
    int size;  //学生人数
    while (scanf("%d", &size) != EOF) {
        int* sName = new int[size]();
        int* sGrade = new int[size]();
        for (int i = 0; i < size; i++)
            scanf("%d %d", &sName[i], &sGrade[i]);
        Qsort(sGrade, sName, 0, size - 1);
        SameSort(sGrade, sName, size);
        for (int i = 0; i < size; i++)
            printf("%d %d\n", sName[i], sGrade[i]);
        free(sName);
        free(sGrade);
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务