надеюсь, что это поможет вам, и лучше использовать это на не очень большой матрице,
class Matrix {
int[][] matrix = new int[][] {
{ 1, 3, 5, 16, 9},
{ 2, 4, 15, 6, 0},
{18, 14, 17, 11, 10},
{14, 15, 12, 16, 13}
};
void sortByColumn() {
class ColMax {
int col;
int val;
ColMax(int c, int v) {
col = c;
val = v;
}
@Override
public String toString() {
return "[" + col + ": " + val + "]";
}
}
int cols = matrix[0].length;
int rows = matrix.length;
int[][] target = new int[rows][cols];
ColMax[] colmaxes = new ColMax[cols];
for (int i = 0; i < cols; i++) {
colmaxes[i] = new ColMax(i, matrix[0][i]);
}
// find every column's max item
for (int i = 0; i < cols; i++) {
for (int k = 0; k < rows; k++) {
if (colmaxes[i].val < matrix[k][i]) {
colmaxes[i].val = matrix[k][i];
}
}
}
// sort it descending
Arrays.sort(colmaxes, (a,b) -> b.val - a.val);
for (int i = 0; i < cols; i ++) {
System.out.print(colmaxes[i] + ", ");
}
System.out.println();
// copy sorted cols
for (int i = 0; i < rows; i++) {
for (int k = 0; k < cols; k++) {
target[i][k] = matrix[i][colmaxes[k].col];
System.out.print(target[i][k] + ", ");
}
System.out.println();
}
}
}