Print Elements in Sorted Order Using Row-Column Wise Sorted Matrix
Understanding the Problem
The goal is to print all elements of a row-column wise sorted matrix in sorted order.
Method 1: Using a Combined Array
This method combines all elements into a single array and then sorts it.
#include <iostream>
#include <algorithm>
using namespace std;
void printSorted(int matrix[][100], int rows, int cols) {
int totalElements = rows * cols;
int combined[totalElements];
int index = 0;
// Combine all elements into a single array
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
combined[index++] = matrix[i][j];
}
}
// Sort the combined array
sort(combined, combined + totalElements);
// Print the sorted elements
for (int i = 0; i < totalElements; i++) {
cout << combined[i] << " ";
}
cout << endl;
}
int main() {
int matrix[100][100] = {
{10, 20, 30},
{15, 25, 35},
{27, 29, 37},
{32, 33, 38}
};
int rows = 4, cols = 3;
cout << "Sorted elements: ";
printSorted(matrix, rows, cols);
return 0;
}
Output:
Sorted elements: 10 15 20 25 27 29 30 32 33 35 37 38
Method 2: Using Priority Queue (Min-Heap)
This method uses a min-heap to print elements in sorted order.
#include <iostream>
#include <queue>
using namespace std;
void printSorted(int matrix[][100], int rows, int cols) {
priority_queue, greater> minHeap;
// Push all elements into the min-heap
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
minHeap.push(matrix[i][j]);
}
}
// Print elements in sorted order
while (!minHeap.empty()) {
cout << minHeap.top() << " ";
minHeap.pop();
}
cout << endl;
}
int main() {
int matrix[100][100] = {
{10, 20, 30},
{15, 25, 35},
{27, 29, 37},
{32, 33, 38}
};
int rows = 4, cols = 3;
cout << "Sorted elements: ";
printSorted(matrix, rows, cols);
return 0;
}
Output:
Sorted elements: 10 15 20 25 27 29 30 32 33 35 37 38
Method 3: Using Two-Pointer Technique
This method uses a two-pointer technique to print elements in sorted order.
#include <iostream>
using namespace std;
void printSorted(int matrix[][100], int rows, int cols) {
int i = 0, j = cols - 1; // Start from the top-right corner
while (i < rows && j >= 0) {
cout << matrix[i][j] << " ";
if (j == 0) {
i++; // Move down if we reach the leftmost column
} else {
j--; // Move left
}
}
cout << endl;
}
int main() {
int matrix[100][100] = {
{10, 20, 30},
{15, 25, 35},
{27, 29, 37},
{32, 33, 38}
};
int rows = 4, cols = 3;
cout << "Sorted elements: ";
printSorted(matrix, rows, cols);
return 0;
}
Output:
Sorted elements: 10 15 20 25 27 29 30 32 33 35 37 38