Sort a Matrix in all way increasing order

• Difficulty Level : Basic
• Last Updated : 23 Dec, 2021

Given a square matrix of order N*N having distinct elements, the task is to sort given matrix in such a way that its rows, columns and both diagonals (diagonal and anti-diagonal) are in increasing order.
Examples:

Input : arr = {1, 4, 2,
3, 5, 6,
9, 7, 8}
Output :{1, 2, 3,
4, 5, 6,
7, 8, 9}

Input : arr = {0, 4,
5, 2}
Output :{0, 2,
4, 5}

Sorting any matrix in a way that its rows, columns and main diagonal are in increasing order is easy. If we consider matrix elements in sequence according to row-major order and sort the sequence, we get the desired result.

Example: arr : {1, 2
3, 4}
Rows in increasing order:  {1,2} and {3,4}
Columns in increasing order:  {1,3} and {2,4}
Diagonal in increasing order:  {1,4}
Anti-diagonal in increasing order:  {2,3}

CPP

 // C++ program to sort matrix in all-way#includeusing namespace std;#define N 3 // Sorts a matrix in increasing ordervoid sortAllWay(int arr[][N]){    // Consider matrix elements (in row major    // order) and sort the sequence.    int *ptr = (int *)arr;    sort(ptr, ptr+N*N);} // driver programint main(){    int arr[N][N] = {1, 0, 3,                     2, 5, 6,                     9, 4, 8};    sortAllWay(arr);      // print resultant matrix    for (int i=0; i

Java

 // Java program to sort matrix in all-wayimport java.util.*; class GFG{static final int N =  3; // Sorts a matrix in increasing orderstatic int[][] sortAllWay(int arr[][]){       // Consider matrix elements (in row major    // order) and sort the sequence.    int []ar = new int[arr.length*arr.length];    int k = 0;    for(int i = 0; i < arr.length; i++) {        for(int j = 0; j < arr.length; j++) {            ar[k] = arr[i][j];            k++;        }    }    Arrays.sort(ar);    k = 0;    for(int i = 0; i < arr.length; i++) {        for(int j = 0; j < arr.length; j++) {            arr[i][j] = ar[k];            k++;        }    }    return arr;} // Driver programpublic static void main(String[] args){    int arr[][] = {{1, 0, 3},    { 2, 5, 6},    {   9, 4, 8}};    arr = sortAllWay(arr);     // print resultant matrix    for (int i = 0; i < N; i++)    {        for (int j = 0; j < N; j++)            System.out.print(arr[i][j] + " ");        System.out.println();    }}} // This code is contributed by umadevi9616

Python3

 # Python program to sort matrix in all-wayN = 3; # Sorts a matrix in increasing orderdef sortAllWay(arr):     # Consider matrix elements (in row major    # order) and sort the sequence.    ar = [0 for i in range(len(arr) * len(arr))];    k = 0;    for i in range(len(arr)):        for j in range(len(arr)):            ar[k] = arr[i][j];            k += 1;         ar.sort();    k = 0;    for i in range(len(arr)):        for j in range(len(arr)):            arr[i][j] = ar[k];            k += 1;         return arr; # Driver programif __name__ == '__main__':    arr = [[ 1, 0, 3 ],[ 2, 5, 6 ],[ 9, 4, 8 ]] ;    arr = sortAllWay(arr);     # prresultant matrix    for i in range(N):        for j in range(N):            print(arr[i][j], end=" ");        print();     # This code IS contributed by umadevi9616

C#

 // C# program to sort matrix in all-wayusing System; public class GFG {  static readonly int N = 3;   // Sorts a matrix in increasing order  static int[,] sortAllWay(int [,]arr) {     // Consider matrix elements (in row major    // order) and sort the sequence.    int[] ar = new int[arr.GetLength(0) * arr.GetLength(1)];    int k = 0;    for (int i = 0; i < arr.GetLength(0); i++) {      for (int j = 0; j < arr.GetLength(1); j++) {        ar[k] = arr[i,j];        k++;      }    }    Array.Sort(ar);    k = 0;    for (int i = 0; i < arr.GetLength(0); i++) {      for (int j = 0; j < arr.GetLength(1); j++) {        arr[i,j] = ar[k];        k++;      }    }    return arr;  }   // Driver program  public static void Main(String[] args) {    int [,]arr = { { 1, 0, 3 }, { 2, 5, 6 }, { 9, 4, 8 } };    arr = sortAllWay(arr);     // print resultant matrix    for (int i = 0; i < N; i++) {      for (int j = 0; j < N; j++)        Console.Write(arr[i,j] + " ");      Console.WriteLine();    }  }} // This code is contributed by umadevi9616

Javascript



Output:

0 1 2
3 4 5
6 8 9

Time Complexity : O(N*N log N)
Auxiliary Space : (N*N)