Sorting a 2D Array according to values in any given column in Java
We are given a 2D array of order N X M and a column number K ( 1<=K<=m). Our task is to sort the 2D array according to values in Column K.
Examples:
Input: If our 2D array is given as (Order 4X4)
39 27 11 42
10 93 91 90
54 78 56 89
24 64 20 65Sorting it by values in column 3
Output:
39 27 11 42
24 64 20 65
54 78 56 89
10 93 91 90
Java Program to Sort a 2D Array according to values in any given Column
// Java Program to Sorting a 2D Array according to values
// in any given column
import java.io.*;
import java.util.*;
// Class
class GFG {
// Method to sort by column
public static void sortbyColumn(int arr[][], int col)
{
// Using built-in sort function Arrays.sort with lambda expressions
Arrays.sort(arr, (a, b) -> Integer.compare(a[col],b[col])); // increasing order
}
public static void main(String args[])
{
int matrix[][] = { { 39, 27, 11, 42 },
{ 10, 93, 91, 90 },
{ 54, 78, 56, 89 },
{ 24, 64, 20, 65 } };
// Sort this matrix by 3rd Column
int col = 3;
sortbyColumn(matrix, col - 1);
// Display the sorted Matrix
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++)
System.out.print(matrix[i][j] + " ");
System.out.println();
}
}
}
Output
39 27 11 42 24 64 20 65 54 78 56 89 10 93 91 90
Java Program to sort 2D Matrix according to any Column
The idea is to use Arrays.sort in Java.
Syntax:
Arrays.sort(arr, (a,b)->a[0]-b[0]);
// Java Code to sort 2D Matrix
// according to any Column
// Importing required classes
import java.util.*;
class sort2DMatrixbycolumn {
// Function to sort by column
public static void sortbyColumn(int arr[][], int col)
{
// Using built-in sort function Arrays.sort
Arrays.sort(arr, new Comparator<int[]>() {
@Override
// Compare values according to columns
public int compare(final int[] entry1,
final int[] entry2)
{
// To sort in descending order revert
// the '>' Operator
if (entry1[col] > entry2[col])
return 1;
else
return -1;
}
}); // End of function call sort().
}
// Main driver method
public static void main(String args[])
{
int matrix[][] = { { 39, 27, 11, 42 },
{ 10, 93, 91, 90 },
{ 54, 78, 56, 89 },
{ 24, 64, 20, 65 } };
// Sorting the matrix by 3rd Column
int col = 3;
sortbyColumn(matrix, col - 1);
// Printing the sorted matrix
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++)
System.out.print(matrix[i][j] + " ");
System.out.println();
}
}
}
Output
39 27 11 42 24 64 20 65 54 78 56 89 10 93 91 90
Explanation of the above Program:
- If element at 0 index of array a is greater than element at 0 index of array b, their difference will be positive. This means array a is kept after array b.
- If element at 0 index of array a is smaller than element at 0 index of array b, their difference will be negative. This means array b is kept after array a.
- If both the elements are equal, then their difference will be 0. This means that they will be equally placed.
- On the basis of these values, the entire array is sorted.
Time complexity: O(n log n) where n is the number of rows.
Contact Us