如何按递增顺序对2D数组进行排序? Java的

时间:2013-11-26 00:43:44

标签: java arrays 2d

明天我有一个测试,我们根据要求编写代码。我需要一些关于如何按递增顺序对2D数组进行排序的解释。我可以为一维数组做这个,但我不确定相同的代码是否适用于2D。您能否以自己的方式解释如何为2D阵列实现这一点,我不希望您认为这是用于家庭作业,我只需要知道如何在明天进行测试。感谢

for (i = 0; i < a.length - 1; i++) {
 for (j = i+1; j < a[0].length; j++) {
      if (a[i] < a[j]) {
           int temp = a[i];
           a[i] = a[j];
           a[j] = temp;
           System.out.print(temp);
      }
 }

}

4 个答案:

答案 0 :(得分:1)

您似乎想要对矩阵的每一行进行排序。 你可以简单地遍历每一行并使用现成的java方法排序,给定a是一个二维数组:

for (i = 0; i < a.length; i++) {
  Arrays.sort(a[i]);
}

无论如何,你的问题对我来说并不是很清楚,我加入了@Normr的评论。

答案 1 :(得分:1)

将2D数组制作成单独的简单(1D)数组(步骤1) 然后使用Arrays.sort()方法对简单数组进行排序(步骤2) 然后将2D数组的每个空间设置为跨越的列数(空间将被更改的X坐标)乘以2D数组中每行的空格数。然后添加行号(空间将被更改的Y坐标),您将获得所需的简单字符串的索引(步骤3)。

我的打印方法在底部。

public static void sort2DArray(int[][] arrayName) 
{
    int[] simpleArray = new int[(arrayName[0].length)*(arrayName.length)];
    for(int r = 0; r < arrayName.length; r++) //CYCLE THROUGH ROWS (Y VALUES)
    {
        for(int c = 0; c < arrayName[0].length; c++) //CYCLE THROUGH COLUMNS (X VALUES)
        {

            simpleArray[arrayName[0].length*r+c] = arrayName[r][c]; //*STEP 1*
        }
    }
    Arrays.sort(simpleArray); //*STEP 2*

    for(int r = 0; r < arrayName.length; r++) //CYCLE THROUGH ROWS (Y VALUES)
    {
        for(int c = 0; c < arrayName[0].length; c++) //CYCLE THROUGH COLUMNS (X VALUES)
        {
            arrayName[r][c] = ( simpleArray[(r * arrayName[0].length) + c ] ); //*STEP 3*
        }
    }
}

public static void print2DArrayAsTable(int[][] arrayName)  //METHOD TO PRINT A 2D ARRAY AS A TABLE
{
    for(int c = 0; c < arrayName.length; c++) //CYCLE THROUGH COLUMNS (X VALUES)
    {
        for(int r = 0; r < arrayName[0].length; r++) //CYCLE THROUGH ROWS (Y VALUES)
        {
            p.o(arrayName[c][r] + " "); //PRINT INDIVIDUAL ARRAY SPACE VALUE
        }
        p.l();
    }
}

答案 2 :(得分:0)

实现选择排序的一种方法是基本上实现选择排序(因此,您需要按顺序遍历元素,以便对元素进行排序,并为每个元素搜索表格的其余部分 - 排除元素之前的元素current元素 - 选择最小元素并将其与当前元素交换)。这将是O(n ^ 2),其中n是数组的总大小。

另一种方法是将元素复制到1d数组,使用任何正确的算法对其进行排序,然后将有序元素复制到2d数组中的正确位置(以便按照您希望的方式对其进行排序)。使用适当的数据集,这可能是O(n),因为它需要O(n)进行复制,并且可以采用O(n)进行计数排序或Bucket Sort(如果它们适合您的设置)。在最坏的情况下,这将是O(nlogn),因为您可以使用MergeSort,HeapSort,QuickSort或任何基于比较的排序算法。

答案 3 :(得分:0)

根据你的描述,我认为你可以解决这个问题。

首先,循环2D数组,并将每个元素放入arrayList中。 然后,使用exists方法Collections.sort(List paramList)对arrayList进行排序。

最后你会得到一个排序列表。