The procedure for sorting a two-dimensional int array depending on the column

I will show you an example for the purpose of the question. The array that I have before and how we want it after sorting:

Before:

Box Weight Priority 1 50 5 2 30 8 3 90 6 4 20 7 5 80 9 

After:

 Box Weight Priority 3 90 6 5 80 9 1 50 5 2 30 8 4 20 7 

we work in an int matrix:

 data= new int[BoxNumber][3]; 

Sorting is based on the second column of Weight.Am, which looks for a procedure to sort the data array.

  public void sortC(int[][] temp) { if (temp.length >= 2) { for (int i = 1; i <= temp.length - 1; i++) { int[] hold = temp[i]; int[] holdP = temp[i-1]; int j = i; while (j > 0 && hold[1] < holdP[1]) // 1 represents the reference of sorting { hold = temp[j]; holdP = temp[j-1]; temp[j] = holdP; temp[j-1] = hold; j--; } } } } sortC(data); 

I tried this one, but unfortunately it doesn’t give the correct sorting, I could not understand the pickle. Some help plz?

+4
source share
2 answers

Use java.util.Arrays.sort with a custom Comparator .

 int[][] temp = { { 1, 50, 5 }, { 2, 30, 8 }, { 3, 90, 6 }, { 4, 20, 7 }, { 5, 80, 9 }, }; Arrays.sort(temp, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return Integer.compare(o2[1], o1[1]); } }); 

As the shmosel mentioned below , with Java 8 you can use:

 Arrays.sort(temp, Comparator.comparingInt(arr -> arr[1])); 
+6
source

This can be done instead of writing your own sorting algorithm:

 int[][] n = new int[10][]; //init your array here List<int[]> ints = Arrays.asList(n); Collections.sort(ints, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[1] - o2[1]; // compare via second column } }); 

and if you want to create an array again:

 int[][] result = ints.toArray(n); 
+1
source

Source: https://habr.com/ru/post/1497028/


All Articles