Java 2-D选择排序

时间:2014-12-15 02:50:54

标签: java arrays sorting multidimensional-array

我正准备参加考试,我们可能会负责对二维数组进行排序。排序表示第一行,第一列是最低行,最后一列是最高行。

我通过创建一维数组来完成任务,然后使用二维数组中的所有值填充它。然后,我通过排序方法传递它。最后,我将已排序数组的每个值写回到2d数组并返回它。

从下面的输出中可以看出,这种方法很有效。我很困惑我的流程在哪里崩溃,我将不胜感激。

输入:

int [] [] nums = {{1,5,9},{8,9,3},{0,7,6}};

输出:

0 0 0

0 0 0

0 0 1

public int[][] sort2D(int[][]nums){
    int[] temp = new int[((nums.length+1)*(nums.length+1))];//make one long array
    for(int i =0; i<nums.length; i++){                      //populate
        int counter = 0;                                    //indices for long array
        for(int j = 0; j<nums[i].length; j++){
            System.out.println(temp[counter]);
            temp[counter] = (int)nums[i][j];
            counter++;
        }
    }
    temp = sort(temp);                                      //sort it (verified code)


    for(int i = 0; i<nums.length; i++){                     //reverse the above process
        int counter = 0;
        for(int j = 0; j<nums.length; j++){
            nums[i][j] = temp[counter];
            counter++;
        }
    }
    return nums;
}

1 个答案:

答案 0 :(得分:0)

我认为你做错的第一件事是:

int[] temp = new int[((nums.length+1)*(nums.length+1))];//make one long array
在您的情况下,

nums.length +1 = 4。您正在将3 * 3阵列复制到4 * 4阵列中。 这有一个有趣的效果,即为你的结果添加5 0。 (temp [9]到temp [15]将被填0) 排序后,这些0将显示

您的代码出现故障的地方是:

for(int i =0; i<nums.length; i++){                      //populate
>>  int counter = 0;                                    //indices for long array
    for(int j = 0; j<nums[i].length; j++){
        System.out.println(temp[counter]);
        temp[counter] = (int)nums[i][j];
        counter++;
    }
}

每次通过其中一个外部数组时,都会将计数器初始化为0。 这意味着在第3遍(最后一个数组)上用nums [2] [0]覆盖temp [0],temp 1和temp [2],nums 2,nums [2] [ 2]

我假设您的实际代码中有

int counter = 0;                                    //indices for long array
for(int i =0; i<nums.length; i++){                      //populate
    for(int j = 0; j<nums[i].length; j++){
        System.out.println(temp[counter]);
        temp[counter++] = (int)nums[i][j];
    }
}

你也可以使用System.arrayCopy,特别是如果你知道长度等等。