矩阵排序 c++
Matrix Sorting c++
我需要根据特定列对 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内联,你不太可能做得更好。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序