如何按递增顺序对二维数组进行排序?Java语言



我明天有一个测试,我们将根据要求编写代码。我需要一些关于如何按递增顺序对2D数组进行排序的解释。我可以对1D阵列这样做,但我不确定相同的代码是否适用于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);
      }
 }

}

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

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

不管怎样,你的问题对我来说不是很清楚,我加入了@Normr的评论。

将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();
    }
}

实现这一点的一种方法基本上是实现选择排序(因此,您可以按照希望对元素进行排序的顺序迭代元素,对于每个元素,您可以在表的其余部分中搜索-排除当前元素之前的元素-选择最小的元素并将其与当前元素交换)。这将是O(n^2),其中n是数组的总大小。

另一种方法是将元素复制到1d数组中,使用任何正确的算法对其进行排序,然后将排序后的元素复制到2d数组中的正确位置(以便按您想要的方式进行排序)。对于正确的数据集,这可能是O(n),因为复制需要O(n。在最坏的情况下,这将是O(nlogn),因为您可以使用MergeSort、HeapSort、QuickSort或任何基于比较的排序算法。

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

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

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

最新更新