我正在尝试设置一个按列排序二维二维数组的方法。根据提供的规范,这种方法也不应该采用行长度不等的不规则数组。我正在使用double [] [] mdarray = {{3.0,4.0,1.0,8.0},{13.0,2.0,12.0,9.0}进行测试
使用打印方法,应显示为
3.0,2.0,1.0,8.0,
13.0,4.0,0.12.0,9,
使用单独的打印方法输出结果时,数组似乎不变。我认为我的问题是如何在移动到下一列之前检查给定列的每一行,但是如果没有Arrays.sort()方法我不确定如何轻松地做到这一点,这是本练习所不允许的。
public void sort(boolean byColumn)
{
if(isRagged() == true)
{
System.out.println("Ragged arrays cannot be sorted by column.");
}
else
{
for(int i = 0; i < mdarray.length; i++)
{
for(int j = i + 1; j < mdarray.length - 1; j ++)
{
for(int k = 0; k < mdarray[i].length; k++)
{
if(mdarray[i][k] > mdarray[j][k])
{
double temp = mdarray[i][k];
mdarray[i][k] = mdarray[j][k];
mdarray[i][k] = temp;
}
}
}
}
}
}
答案 0 :(得分:0)
如您所知,您可以将2D数组视为一组列或行。该程序必须对列进行排序,因此我们将该数组视为一组列。
程序完成:
选择您最喜欢的算法来排序一维数组(看看here)
double[][] mdarray = {{3.0, 4.0, 1.0, 8.0}, {13.0, 2.0, 12.0, 9.0}};
//loop all columns
for(int col = 0; col < mdarray[0].length; col++){
//loops all rows and use bubble sort algorithm in ascending order
for(int i = 1; i < mdarray.length; i++){
for(int j = i; j < mdarray.length; j++){
if(mdarray[j - 1][col] > mdarray[j][col]){
//swap
double temp = mdarray[j][col];
mdarray[j][col] = mdarray[j-1][col];
mdarray[j-1][col] = temp;
}
}
}
}
如果打印mdarray
的每一行,输出将为:
mdarray[0]: 3.0 2.0 1.0 8.0
mdarray[1]: 13.0 4.0 12.0 9.0