Java:按列排序2D数组而不使用Arrays.sort()

时间:2016-12-08 07:29:05

标签: java arrays sorting multidimensional-array

我正在尝试设置一个按列排序二维二维数组的方法。根据提供的规范,这种方法也不应该采用行长度不等的不规则数组。我正在使用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;
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如您所知,您可以将2D数组视为一组列或行。该程序必须对列进行排序,因此我们将该数组视为一组列。

程序完成:

  1. 循环所有列
  2. 选择您最喜欢的算法来排序一维数组(看看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;
                }
            }
        }
    }
    
  3. 如果打印mdarray的每一行,输出将为:

    mdarray[0]: 3.0  2.0 1.0  8.0
    mdarray[1]: 13.0 4.0 12.0 9.0