Given a n x n matrix. The problem is to sort the given matrix in strict order. Here strict order means that matrix is sorted in a way such that all elements in a row are sorted in increasing order and for row ‘i’, where 1 <= i <= n-1, first element of row ‘i’ is greater than or equal to the last element of row ‘i-1’.
Examples:
Input : mat[][] = { {5, 4, 7},
{1, 3, 8},
{2, 9, 6} }
Output : 1 2 3
4 5 6
7 8 9
Approach: Create a temp[] array of size n^2. Starting with the first row one by one copy the elements of the given matrix into temp[]. Sort temp[]. Now one by one copy the elements of temp[] back to the given matrix.
Python3
# Python3 implementation to sort# the given matrixSIZE = 10# Function to sort the given matrixdef sortMat(mat, n) : # Temporary matrix of size n^2 temp = [0] * (n * n) k = 0 # Copy the elements of matrix # one by one into temp[] for i in range(0, n) : for j in range(0, n) : temp[k] = mat[i][j] k += 1 # sort temp[] temp.sort() # copy the elements of temp[] # one by one in mat[][] k = 0 for i in range(0, n) : for j in range(0, n) : mat[i][j] = temp[k] k += 1# Function to print the given matrixdef printMat(mat, n) : for i in range(0, n) : for j in range( 0, n ) : print(mat[i][j] , end = " ") print(" ") # Driver program to test abovemat = [ [ 5, 4, 7 ], [ 1, 3, 8 ], [ 2, 9, 6 ] ]n = 3print( "Original Matrix:")printMat(mat, n)sortMat(mat, n)print("Matrix After Sorting:")printMat(mat, n)# This code is contributed by Nikita Tiwari. |
Original Matrix: 5 4 7 1 3 8 2 9 6 Matrix After Sorting: 1 2 3 4 5 6 7 8 9
Time Complexity: O(n2log2n).
Auxiliary Space: O(n2).
To sort the matrix in the required strict order, we can use a different approach. One possibility is to flatten the matrix into a single list, sort the list, and then reshape the list into the original matrix shape.
Here is an example of how this can be done:
Python3
import numpy as npmat = [[5, 4, 7], [1, 3, 8], [2, 9, 6]]# flatten the matrix into a single listflat_list = [item for sublist in mat for item in sublist]# sort the listflat_list.sort()# reshape the list into the original matrix shapemat = np.array(flat_list).reshape((3, 3))# print the sorted matrixfor row in mat: print(row) |
This will print the following matrix:
[1 2 3]
[4 5 6]
[7 8 9]
Time complexity: O(N * log N), where N is the number of elements in the matrix.
Auxiliary space: O(N), as it requires an additional list to store the flattened matrix.
Please refer complete article on Sort the given matrix for more details!
Approach#3: Using heapq
Another way to sort the matrix is to use a heap. We can create a min-heap and then extract the minimum element repeatedly to create a sorted list, which can then be reshaped back into a matrix.
Algorithm
1. Create a min-heap and insert all elements of the matrix into it.
2. Extract the minimum element from the heap repeatedly to create a sorted list.
3. Reshape the sorted list back into a matrix.
Python3
import heapqdef sort_matrix(mat): # Step 1: Create a min-heap and insert all elements of the matrix into it. heap = [] for row in mat: for num in row: heapq.heappush(heap, num) # Step 2: Extract the minimum element from the heap repeatedly to create a sorted list. sorted_list = [] while heap: sorted_list.append(heapq.heappop(heap)) # Step 3: Reshape the sorted list back into a matrix. n_rows = len(mat) n_cols = len(mat[0]) sorted_mat = [sorted_list[i:i+n_cols] for i in range(0, len(sorted_list), n_cols)] return sorted_mat# Example usage:mat = [[5, 4, 7], [1, 3, 8], [2, 9, 6]]sorted_mat = sort_matrix(mat)for row in sorted_mat: print(row) |
[1, 2, 3] [4, 5, 6] [7, 8, 9]
Time Complexity: O(n log n), where n is the total number of elements in the matrix. This is because inserting n elements into the heap takes O(n log n) time, and extracting n elements from the heap also takes O(n log n) time.
Space Complexity: O(n), where n is the total number
You’ll access excellent video content by our CEO, Sandeep Jain, tackle common interview questions, and engage in real-time coding contests covering various DSA topics. We’re here to prepare you thoroughly for online assessments and interviews.
Ready to dive in? Explore our free demo content and join our DSA course, trusted by over 100,000neveropen! Whether it’s DSA in C++, Java, Python, or JavaScript we’ve got you covered. Let’s embark on this exciting journey together!
