import java.util.Arrays;
public class MyClass {
private static int GetBoundariesLength(int matrix[][]) {
int rows = matrix.length;
int cols = matrix[0].length;
return (rows * 2) + (cols * 2) - 4;
}
private static void SortMatrixBoundaries(int[][] matrix) {
int rows = matrix.length;
int cols = matrix[0].length;
Integer[] array = new Integer[GetBoundariesLength(matrix)];
int array_index = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (i == 0 || j == 0 || i == rows - 1 || j == cols - 1) {
array[array_index++] = matrix[i][j];
}
}
}
Arrays.parallelSort(array);
array_index = 0;
for (int j = 0; j < cols; j++) {
matrix[0][j] = array[array_index++];
}
for (int j = 0; j < cols; j++) {
if (j == cols - 1) {
for (int i = 1; i < rows; i++) {
matrix[i][j] = array[array_index++];
}
}
}
for (int j = cols - 2; j > -1; j--) {
matrix[rows - 1][j] = array[array_index++];
}
for (int i = rows - 2; i > 0; i--) {
matrix[i][0] = array[array_index++];
}
}
public static void main(String args[]) {
int matrix[][] = {
{ 1, 2, 3, 4, 5},
{ 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20}
};
SortMatrixBoundaries(matrix);
for (int[] x : matrix) {
for (int n : x) {
System.out.print(n + " ");
}
System.out.println();
}
}
}
/*
run:
1 2 3 4 5
20 7 8 9 6
19 12 13 14 10
18 17 16 15 11
*/