如何按升序对第一行中的数字进行排序,然后对第二行中的数字进行排序,最后对第三行中的数字进行排序,但保存列顺序?
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;
}
如何按列值升序对第一行中的数字进行排序,然后是第二行中的数字,最后是第三行中的数字。例如,我有以下数组:
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;
}