Sorting rows of matrix in ascending order followed by columns in descending order

06 Jul, 2022
Given a matrix, sort the rows of matrix in ascending order followed by sorting the columns in descending order. Examples : 
Input : a[3][3] = {{1, 2, 3},
                  {4, 5, 6}, 
                  {7, 8, 9}};
Output : 7 8 9
         4 5 6
         1 2 3

Input : a[3][3] = {{3, 2, 1},
                  {9, 8, 7}, 
                  {6, 5, 4}};
Output : 7 8 9
         4 5 6
         1 2 3
Approach:
Traverse all rows one by one and sort rows in ascending order using a simple array sort. 
Convert matrix to its transpose 
Again sort all rows, but this time in descending order. 
Again convert a matrix to its transpose 
Below is the implementation of the above approach:
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation to sort the rows// of matrix in ascending order followed by// sorting the columns in descending order#include <bits/stdc++.h>using namespace std; #define MAX_SIZE 10 // function to sort each row of the matrix// according to the order specified by// ascending.void sortByRow(int mat[][MAX_SIZE], int n,                           bool ascending){    for (int i = 0; i < n; i++)    {      if (ascending)           sort(mat[i], mat[i] + n);      else          sort(mat[i], mat[i] + n, greater<int>());    }     } // function to find transpose of the matrixvoid transpose(int mat[][MAX_SIZE], int n){    for (int i = 0; i < n; i++)        for (int j = i + 1; j < n; j++)             // swapping element at index (i, j)            // by element at index (j, i)            swap(mat[i][j], mat[j][i]);} // function to sort the matrix row-wise// and column-wisevoid sortMatRowAndColWise(int mat[][MAX_SIZE],                                       int n){    // sort rows of mat[][]    sortByRow(mat, n, true);     // get transpose of mat[][]    transpose(mat, n);     // again sort rows of mat[][] in descending    // order.    sortByRow(mat, n, false);     // again get transpose of mat[][]    transpose(mat, n);} // function to print the matrixvoid printMat(int mat[][MAX_SIZE], int n){    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++)            cout << mat[i][j] << " ";        cout << endl;    }} // Driver program to test aboveint main(){    int n = 3;         int mat[n][MAX_SIZE]  = {{3, 2, 1},                            {9, 8, 7},                            {6, 5, 4}};     cout << "Original Matrix:\n";    printMat(mat, n);     sortMatRowAndColWise(mat, n);     cout << "\nMatrix After Sorting:\n";    printMat(mat, n);     return 0;}
// Java implementation to sort the rows// of matrix in ascending order followed by// sorting the columns in descending orderimport java.util.Arrays;import java.util.Collections; class GFG{    static int MAX_SIZE=10;         // function to sort each row of the matrix    // according to the order specified by    // ascending.    static void sortByRow(Integer mat[][], int n,                                 boolean ascending)    {        for (int i = 0; i < n; i++)        {            if (ascending)                Arrays.sort(mat[i]);            else                Arrays.sort(mat[i],Collections.reverseOrder());        }        }         // function to find transpose of the matrix    static void transpose(Integer mat[][], int n)    {        for (int i = 0; i < n; i++)            for (int j = i + 1; j < n; j++)            {                // swapping element at index (i, j)                // by element at index (j, i)                int temp = mat[i][j];                mat[i][j] = mat[j][i];                mat[j][i] = temp;            }    }         // function to sort the matrix row-wise    // and column-wise    static void sortMatRowAndColWise(Integer mat[][],                                              int n)    {        // sort rows of mat[][]        sortByRow(mat, n, true);             // get transpose of mat[][]        transpose(mat, n);             // again sort rows of mat[][] in descending        // order.        sortByRow(mat, n, false);             // again get transpose of mat[][]        transpose(mat, n);    }         // function to print the matrix    static void printMat(Integer mat[][], int n)    {        for (int i = 0; i < n; i++)        {            for (int j = 0; j < n; j++)                System.out.print(mat[i][j] + " ");            System.out.println();        }    }         // Driver code    public static void main (String[] args)    {        int n = 3;                 Integer mat[][] = {{3, 2, 1},                           {9, 8, 7},                           {6, 5, 4}};             System.out.print("Original Matrix:\n");        printMat(mat, n);             sortMatRowAndColWise(mat, n);             System.out.print("\nMatrix After Sorting:\n");        printMat(mat, n);    }} // This code is contributed by Anant Agarwal.
# Python implementation to sort the rows# of matrix in ascending order followed by# sorting the columns in descending order MAX_SIZE=10  # function to sort each row of the matrix# according to the order specified by# ascending.def sortByRow(mat, n, ascending):     for i in range(n):        if (ascending):               mat[i].sort()        else:            mat[i].sort(reverse=True)  # function to find# transpose of the matrixdef transpose(mat, n):     for i in range(n):        for j in range(i + 1, n):                     # swapping element at index (i, j)            # by element at index (j, i)            temp = mat[i][j]            mat[i][j] = mat[j][i]            mat[j][i] = temp # function to sort# the matrix row-wise# and column-wisedef sortMatRowAndColWise(mat, n):     # sort rows of mat[][]    sortByRow(mat, n, True)      # get transpose of mat[][]    transpose(mat, n)      # again sort rows of    # mat[][] in descending    # order.    sortByRow(mat, n, False)      # again get transpose of mat[][]    transpose(mat, n)  # function to print the matrixdef printMat(mat, n):     for i in range(n):        for j in range(n):            print(mat[i][j] , " ", end="")        print() #Driver coden = 3      mat = [[3, 2, 1],    [9, 8, 7],    [6, 5, 4]]  print("Original Matrix:")printMat(mat, n)  sortMatRowAndColWise(mat, n)  print("Matrix After Sorting:")printMat(mat, n) # This code is contributed# by Anant Agarwal.
// C# implementation to sort the rows// of matrix in ascending order followed by// sorting the columns in descending orderusing System; public static class GFG {         // function to sort each row of the matrix    // according to the order specified by    // ascending.    static void sortByRow(int[, ] m)    {        // loop for rows of matrix        for (int i = 0; i < m.GetLength(0); i++) {             // loop for column of matrix            for (int j = 0; j < m.GetLength(1); j++) {                 // loop for comparison and swapping                for (int k = 0; k < m.GetLength(1) - j - 1;                     k++) {                    if (m[i, k] > m[i, k + 1]) {                         // swapping of elements                        int t = m[i, k];                        m[i, k] = m[i, k + 1];                        m[i, k + 1] = t;                    }                }            }        }    }     static void reverseArray(int[, ] arr)    {         // Traverse each row of [,]arr        for (int i = 0; i < arr.GetLength(1); i++) {             // Initialise start and end index            int start = 0;            int end = arr.GetLength(0) - 1;             // Till start < end, swap the element            // at start and end index            while (start < end) {                 // Swap the element                int temp = arr[i, start];                arr[i, start] = arr[i, end];                arr[i, end] = temp;                 // Increment start and decrement                // end for next pair of swapping                start++;                end--;            }        }    }     // function to find transpose of the matrix    public static void transpose(int[, ] mat, int n)    {        for (int i = 0; i < n; i++) {            for (int j = i + 1; j < n; j++) {                 // swapping element at index (i, j)                // by element at index (j, i)                int temp = mat[i, j];                mat[i, j] = mat[j, i];                mat[j, i] = temp;            }        }    }     // function to sort the matrix row-wise    // and column-wise    public static void sortMatRowAndColWise(int[, ] mat,                                            int n)    {        // sort rows of mat[][]        sortByRow(mat);         // get transpose of mat[][]        transpose(mat, n);         // again sort rows of mat[][] in descending        // order.        sortByRow(mat);        reverseArray(mat);         // again get transpose of mat[][]        transpose(mat, n);    }     // function to print the matrix    public static void printMat(int[, ] mat, int n)    {        for (int i = 0; i < n; i++) {            for (int j = 0; j < n; j++) {                Console.Write(mat[i, j]);                Console.Write(" ");            }            Console.Write("\n");        }    }     // Driver program to test above    internal static void Main()    {        int n = 3;         int[, ] mat            = { { 3, 2, 1 }, { 9, 8, 7 }, { 6, 5, 4 } };         Console.Write("Original Matrix:\n");        printMat(mat, n);         sortMatRowAndColWise(mat, n);         Console.Write("\nMatrix After Sorting:\n");        printMat(mat, n);    }} // This code is contributed by Aarti_Rathi
<?php// PHP implementation to sort the rows// of matrix in ascending order followed by// sorting the columns in descending order$MAX_SIZE = 10; // function to sort each row of the matrix// according to the order specified by// ascending.function sortByRow(&$mat, $n, $ascending){    for ($i = 0; $i < $n; $i++)    {        if ($ascending)            sort($mat[$i]);        else            rsort($mat[$i]);    }    } // function to find transpose// of the matrixfunction transpose(&$mat, $n){    for ($i = 0; $i < $n; $i++)    {        for ($j = $i + 1; $j < $n; $j++)        {            // swapping element at index (i, j)            // by element at index (j, i)            $temp = $mat[$i][$j];            $mat[$i][$j] = $mat[$j][$i];            $mat[$j][$i] = $temp;        }    }} // function to sort the matrix row-wise// and column-wisefunction sortMatRowAndColWise(&$mat, $n){    // sort rows of mat[][]    sortByRow($mat, $n, true);     // get transpose of mat[][]    transpose($mat, $n);     // again sort rows of mat[][] in    // descending order.    sortByRow($mat, $n, false);     // again get transpose of mat[][]    transpose($mat, $n);} // function to print the matrixfunction printMat(&$mat, $n){    for ($i = 0; $i < $n; $i++)    {        for ($j = 0; $j < $n; $j++)            echo $mat[$i][$j] . " ";        echo "\n" ;    }} // Driver Code$n = 3; $mat = array(array(3, 2, 1),             array(9, 8, 7),             array(6, 5, 4)); echo "Original Matrix:\n";printMat($mat, $n); sortMatRowAndColWise($mat, $n); echo "\nMatrix After Sorting:\n";printMat($mat, $n); // This code is contributed by Ita_c?>
<script>// Javascript implementation to sort the rows// of matrix in ascending order followed by// sorting the columns in descending order         let MAX_SIZE=10;         // function to sort each row of the matrix    // according to the order specified by    // ascending.    function sortByRow(mat,n,ascending)    {        for (let i = 0; i < n; i++)        {            if (ascending)                mat[i].sort(function(a,b){return a-b;});            else                mat[i].sort(function(a,b){return b-a;});        }        }         // function to find transpose of the matrix    function transpose(mat,n)    {        for (let i = 0; i < n; i++)            for (let j = i + 1; j < n; j++)            {                // swapping element at index (i, j)                // by element at index (j, i)                let temp = mat[i][j];                mat[i][j] = mat[j][i];                mat[j][i] = temp;            }    }         // function to sort the matrix row-wise    // and column-wise    function sortMatRowAndColWise(mat,n)    {        // sort rows of mat[][]        sortByRow(mat, n, true);               // get transpose of mat[][]        transpose(mat, n);               // again sort rows of mat[][] in descending        // order.        sortByRow(mat, n, false);               // again get transpose of mat[][]        transpose(mat, n);    }         // function to print the matrix    function printMat(mat,n)    {        for (let i = 0; i < n; i++)        {            for (let j = 0; j < n; j++)                document.write(mat[i][j] + " ");            document.write("<br>");        }    }         // Driver code    let n = 3;         let mat = [[3, 2, 1],    [9, 8, 7],    [6, 5, 4]];         document.write("Original Matrix:<br>");    printMat(mat, n);          sortMatRowAndColWise(mat, n);           document.write("\nMatrix After Sorting:<br>");    printMat(mat, n);              // This code is contributed by avanitrachhadiya2155</script>
Original Matrix:
3 2 1 
9 8 7 
6 5 4 

Matrix After Sorting:
7 8 9 
4 5 6 
1 2 3 

Time Complexity: O(N2 log N)Auxiliary Space: O(1)
ukasp
avanitrachhadiya2155
singhh3010
codewithshinchan
harendrakumar123
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
The Celebrity Problem
Merge Sort
Bubble Sort Algorithm
QuickSort
Insertion Sort
Selection Sort Algorithm