Python Program to Sort the given matrix
Last Updated :
14 Apr, 2023
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
SIZE = 10
def sortMat(mat, n) :
temp = [ 0 ] * (n * n)
k = 0
for i in range ( 0 , n) :
for j in range ( 0 , n) :
temp[k] = mat[i][j]
k + = 1
temp.sort()
k = 0
for i in range ( 0 , n) :
for j in range ( 0 , n) :
mat[i][j] = temp[k]
k + = 1
def printMat(mat, n) :
for i in range ( 0 , n) :
for j in range ( 0 , n ) :
print (mat[i][j] , end = " " )
print ( " " )
mat = [ [ 5 , 4 , 7 ],
[ 1 , 3 , 8 ],
[ 2 , 9 , 6 ] ]
n = 3
print ( "Original Matrix:" )
printMat(mat, n)
sortMat(mat, n)
print ( "Matrix After Sorting:" )
printMat(mat, n)
|
Output
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 np
mat = [[ 5 , 4 , 7 ],
[ 1 , 3 , 8 ],
[ 2 , 9 , 6 ]]
flat_list = [item for sublist in mat for item in sublist]
flat_list.sort()
mat = np.array(flat_list).reshape(( 3 , 3 ))
for 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 heapq
def sort_matrix(mat):
heap = []
for row in mat:
for num in row:
heapq.heappush(heap, num)
sorted_list = []
while heap:
sorted_list.append(heapq.heappop(heap))
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
mat = [[ 5 , 4 , 7 ], [ 1 , 3 , 8 ], [ 2 , 9 , 6 ]]
sorted_mat = sort_matrix(mat)
for row in sorted_mat:
print (row)
|
Output
[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
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...