按特定行排序2D数组

时间:2016-03-23 16:05:01

标签: java arrays sorting multidimensional-array

我想按第二行按升序对2x3数组进行排序。第一行的值必须相应地改变位置。

E.g。

1 3 5
4 2 6

应该成为

3 1 5
2 4 6

代码:

int[][] values = {{1, 5, 3},
                  {4, 6, 2}};
Arrays.sort(values, new Comparator<int[]>(){
    public int compare(int[] o1, int[] o2) {
        return (Integer.valueOf(o1[0]).compareTo(o2[0]));
    }
});

System.out.println(Arrays.deepToString(values));

输出与输入相同。我认为错误来自compare方法,但我不知道它是什么。它是什么?

2 个答案:

答案 0 :(得分:0)

比较器逻辑存在问题,因为您只比较不同行的相同列的值,而不是同一行的不同列。

你应该做的事情是这样的:

public static void main (String[] args) throws Exception
{
    int[][] values = {{1, 5, 3},
                      {4, 6, 2}};

    for(int i = 0; i < 2; i++) {                  
        for(int j = i + 1; j < 3; j++) {
            if(values[1][i] > values[1][j]) {
                swap(values,0,i,j);
                swap(values,1,i,j);
            }
        }
    }
}

private static void swap(int[][] values,int row,int x, int y) {
    int temp = values[row][x];
    values[row][x] = values[row][y];
    values[row][y] = temp;
}

您必须适当更改比较器逻辑。

答案 1 :(得分:0)

拜托,试试这个,会有用,

public static void main(String[] args) {

        int[][] values = {{1, 5, 3},
                {4, 6, 2}};

        for(int i = 0 ; i < values.length; i ++){
            for(int j = 1 ; j < values[i].length ; j ++){
                if(i != 0){
                    if(values[i][j-1] > values[i][j] ){

                        for(int k = j;k>0;k--){

                            if(values[i][k-1] > values[i][k] ){
                                 int temp1 = values[i][k-1];
                                 values[i][k-1] =  values[i][k];
                                 values[i][k] = temp1;
                                 int temp2  = values[i-1][k-1];
                                 values[i-1][k-1] =  values[i-1][k];
                                 values[i-1][k] = temp2;
                            }

                        }


                    }
                }
            }
        }


        System.out.println(Arrays.deepToString(values));

    }

输出:

[
 [3, 1, 5], 
 [2, 4, 6]
]