如何按升序对第一行中的数字进行排序,然后对第二行中的数字进行排序,最后对第三行中的数字进行排序,但保存列顺序?

How to sort numbers in the first row then in the second one and finally in the third one in the ascending order but saving the columns order?

如何按列值升序对第一行中的数字进行排序,然后是第二行中的数字,最后是第三行中的数字。例如,我有以下数组:

  7 |10 |15 | 7 | 7
  5 | 0 | 4 | 3 | 3
  1 | 4 | 3 | 2 | 4

然后我需要通过对第一行进行排序但保存列顺序来转换它:

 7 | 7 | 7 |10 |15
 5 | 3 | 3 | 0 | 4
 1 | 2 | 4 | 4 | 3

在第二次迭代中,我应该得到这样的结果:

 7 | 7 | 7 |10 |15
 3 | 3 | 5 | 0 | 4
 4 | 2 | 1 | 4 | 3

最后:

 7 | 7 | 7 |10 |15
 3 | 3 | 5 | 0 | 4
 2 | 4 | 1 | 4 | 3

我有以下代码对第一行进行排序并保存列顺序:

  Integer k = column.size() - 1;
  while (k > 1) {
    Integer id = 0;
    for (Integer j = 1; j <= k; j++)
      if (listWithNumbers[0][j] > listWithNumbers[0][id])
        id = j;
      for (Integer i = 0; i < listWithNumbers.size(); i++) {
        Integer max = listWithNumbers[i][id];
        listWithNumbers[i][id] = listWithNumbers[i][k];
        listWithNumbers[i][k] = max;
      }
  k -= 1;
}

而且,我尝试重写相同的代码来对第二行进行排序,但排序不正确:

k = column.size() - 1;
while (k > 1) {
  Integer id = 0;
    for (Integer j = 1; j <= k; j++) {
        if (listWithNumbers[0][j-1] == listWithNumbers[0][j])
          id = j-1;
      for (Integer i = 1; i < listWithNumbers.size(); i++) {
        Integer max = listWithNumbers[i][id];
        listWithNumbers[i][id] = listWithNumbers[i][k];
        listWithNumbers[i][k] = max;
      }    
    }        
  k -= 1;
}

如果不需要多次迭代,EG 不必打印出步骤,然后只需创建一个 Comparator 来检查第一行,如果相同则检查第二行,依此类推在...

像这样:

public Comparator<Number[]> comp = (Number[] a, Number[] b) ->
{
  for ( int i = 0; i < a.length; ++i )
    if ( !a[i].equals( b[i] ) )
      return a[i].compareTo( b[i] );
  return 0;
}