Sort a Matrix in all way increasing order

07 Jul, 2022
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[3][3] = {1, 4, 2,
                     3, 5, 6,
                     9, 7, 8}
Output :{1, 2, 3,
         4, 5, 6,
         7, 8, 9}

Input : arr[2][2] = {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[2][2] : {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}
Implementation:
CPP
Java
Python3
C#
Javascript
// C++ program to sort matrix in all-way#include<bits/stdc++.h>using 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<N; i++)    {        for (int j=0; j<N; j++)            cout << arr[i][j] << " ";        cout <<"\n";    }     return 0;}
// 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
# 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);     # print resultant matrix    for i in range(N):        for j in range(N):            print(arr[i][j], end=" ");        print();     # This code IS contributed by umadevi9616
// 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
<script>  // Javascript program to sort matrix in all-wayvar N = 3; // Sorts a matrix in increasing orderfunction sortAllWay(arr){    // Consider matrix elements (in row major    // order) and sort the sequence.    arr.sort((a,b)=>a-b);    return arr;} // driver programvar arr = [1, 0, 3,                 2, 5, 6,                 9, 4, 8];arr = sortAllWay(arr);// print resultant matrixfor(var i=0; i<N; i++){    for (var j=0; j<N; j++)        document.write(arr[N*i+j] + " ");    document.write("<br>");} // This code is contributed by rutvik_56. </script>
0 1 2 
3 4 5 
6 8 9 
Time Complexity : O(N*N log N) Auxiliary Space : (N*N)
This article is contributed by Shivam Pradhan (anuj_charm). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 
rutvik_56
umadevi9616
simmytarika5
hardikkoriintern
Matrix
Sorting
Sorting
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Matrix Chain Multiplication | DP-8
Program to find largest element in an array
Rat in a Maze | Backtracking-2
Sudoku | Backtracking-7
Find the number of islands | Set 1 (Using DFS)
Merge Sort
Bubble Sort Algorithm
QuickSort
Insertion Sort
Selection Sort Algorithm