Я хочу создать метод на Java для сортировки массива по значениям в более чем заданном столбце. Позвольте мне объяснить это на примере (матричный массив):
int matrix[][] = {
{0,2,432},{1,1,282},{2,2,456},{3,4,191},{4,5,293},
{5,2,475},{6,2,491},{7,5,171},{8,5,134},{9,3,354}};
Мне нужно отсортировать каждую тройку по второй позиции в порядке убывания. После этого мне нужно отсортировать тройку по возрастанию по третьей позиции.
Код, который я использую для этого:
import java.util.*;
public 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) {
if (entry1[col] < entry2[col])
return 1;
else
return -1;
}
}); // End of function call sort().
}
// Driver Code
public static void main(String args[]) {
int matrix[][] = {
{0,2,432},{1,1,282},{2,2,456},{3,4,191},{4,5,293},
{5,2,475},{6,2,491},{7,5,171},{8,5,134},{9,3,354}};
// Sort this matrix by 2rd Column
int col = 2;
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();
}
}
}
Вывод ранее описанного кода:
[[8,5,134],[7,5,171],[4,5,293],[3,4,191],[9,3,354],
[6,2,491],[5,2,475],[2,2,456],[0,2,432],[1,1,282]]
Но необходимый результат должен быть:
[[8,5,134],[7,5,171],[4,5,293],[3,4,191],[9,3,354],
[0,2,432],[2,2,456],[5,2,475],[6,2,491],[1,1,282]]
Обратите внимание, что по второй позиции имеем: 5,5,5,4,3,2,2,2,2,1 (в порядке убывания), а по третьей позиции порядок: 134 171 293 (для тройки с 5 во второй позиции), 191 (для тройки с 4 во второй позиции), 354 (для тройки с 3 во второй позиции), 432 456 475 491 (для троек с 2 во второй позиции) ) и, наконец, 282 для тройки с 1 на второй позиции.
Любая помощь будет высоко оценен. Спасибо.