📅  最后修改于: 2023-12-03 15:12:36.471000             🧑  作者: Mango
给定一个 n * m 的矩阵,编写一个函数来排序所有元素。每一行必须是升序的,每一列也必须是升序的。可以假定所有元素都是比较相似的,所以可以使用快速排序的较佳策略。
函数签名:void sortMatrix(int* matrix[], int n, int m)
。
Input:
3 3
5 4 3
0 2 1
7 6 8
Output:
3 4 5
1 2 0
6 7 8
对于一个矩阵,我们可以将其看成一个数组,然后将数组进行排序。如何排序呢?我们可以选择快排,先根据每行的第一个数进行分割,然后分别递归排序,最后再将整个数组进行排序。这里我们选用STL自带的sort函数。
#include <bits/stdc++.h>
using namespace std;
int n, m;
int matrix[1005][1005];
void sortMatrix(int* matrix[], int n, int m) {
for (int i = 0; i < n; i++) {
sort(matrix[i], matrix[i] + m);
}
for (int i = 0; i < m; i++) {
int col[1005];
for (int j = 0; j < n; j++) {
col[j] = matrix[j][i];
}
sort(col, col + n);
for (int j = 0; j < n; j++) {
matrix[j][i] = col[j];
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrix[i][j];
}
}
sortMatrix(matrix, n, m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}