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.
import java.util.Arrays; public class SortedMatrix { public static void printSorted(int[][] matrix) { int rows = matrix.length; int cols = matrix[0].length; int totalElements = rows * cols; int[] combined = new int[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 Arrays.sort(combined); // Print the sorted elements for (int num : combined) { System.out.print(num + " "); } System.out.println(); } public static void main(String[] args) { int[][] matrix = { {10, 20, 30}, {15, 25, 35}, {27, 29, 37}, {32, 33, 38} }; System.out.print("Sorted elements: "); printSorted(matrix); } }
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.
import java.util.PriorityQueue; public class SortedMatrix { public static void printSorted(int[][] matrix) { PriorityQueueminHeap = new PriorityQueue<>(); // Push all elements into the min-heap for (int[] row : matrix) { for (int num : row) { minHeap.add(num); } } // Print elements in sorted order while (!minHeap.isEmpty()) { System.out.print(minHeap.poll() + " "); } System.out.println(); } public static void main(String[] args) { int[][] matrix = { {10, 20, 30}, {15, 25, 35}, {27, 29, 37}, {32, 33, 38} }; System.out.print("Sorted elements: "); printSorted(matrix); } }
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.
public class SortedMatrix { public static void printSorted(int[][] matrix) { int rows = matrix.length; int cols = matrix[0].length; int i = 0, j = cols - 1; // Start from the top-right corner while (i < rows && j >= 0) { System.out.print(matrix[i][j] + " "); if (j == 0) { i++; // Move down if we reach the leftmost column } else { j--; // Move left } } System.out.println(); } public static void main(String[] args) { int[][] matrix = { {10, 20, 30}, {15, 25, 35}, {27, 29, 37}, {32, 33, 38} }; System.out.print("Sorted elements: "); printSorted(matrix); } }
Output:
Sorted elements: 10 15 20 25 27 29 30 32 33 35 37 38