矩阵排序 c++

Matrix Sorting c++

本文关键字:c++ 排序      更新时间:2023-10-16

我需要根据特定列对 c++ 中的矩阵进行排序,并且它必须尽可能提高性能。这是矩阵

JobId;DueDate;RelDate;TardPenalty
1;575;4;1
2;563;70;2
3;483;1;8
4;519;68;1
5;540;64;10
6;546;126;8
7;550;2;6
8;563;70;4
9;470;9;6
10;480;21;3
11;489;6;6
12;593;29;10
13;532;37;7
14;591;25;10
15;468;7;1
16;570;26;1
17;498;73;5
18;504;0;4
19;510;5;10
20;541;15;8
21;583;13;3
22;532;37;3
23;534;42;8
24;585;16;4
25;491;8;5
26;584;66;9
27;563;70;7
28;555;40;3
29;475;65;8
30;549;27;6

存储在vector<vector> Rel[][4]我需要对DueDate(Rel[][1])进行排序并跟踪其他数据。有人可以帮助我吗?我尝试使用 sort() 函数,但它对矩阵不利。

多谢

编辑:我做了一个矩阵快速排序算法,但它崩溃了,这是我的代码

void quickSort(vector<vector<int>> arr, int left, int right) {
    int i = left, j = right;
    vector<int> tmp;
    int pivot = arr[(left + right) / 2][1];
    /* partition */
    while (i <= j) {
        while (arr[i][1] < pivot)
            i++;
        while (arr[j][1] > pivot)
            j--;
        if (i <= j) {
            for (int l = 0; l < 4; l++) {
                tmp[l] = arr[i][l];
            }
            for (int l = 0; l < 4; l++) {
                arr[i][l] = arr[j][l];
            }
            for (int l = 0; l < 4; l++) {
                arr[j][l] = tmp[l];
            }
            i++;
            j--;
        }
    };
    /* recursion */
    if (left < j)
        quickSort(arr, left, j);
    if (i < right)
        quickSort(arr, i, right);
}

这对我来说不像一个矩阵。 这看起来像一系列记录。 我会定义一条记录:

struct Record
{
    int JobId;
    int DueDate;
    int RelDate;
    int TardPenalt
};

将数据存储为

std::vector<Record> Rel;

定义一个比较函数:

bool sortByDate( const Record& lhs, const Record& rhs )
{
    return lhs.DueDate < rhs.DueDate;
}

并使用标准函数进行排序:

std::sort( Rel.begin(), Rel.end(), sortByDate );

如果你使sortByDate内联,你不太可能做得更好。