【问题标题】:Sorting A Two-Dimensional (2D) Array as a whole without Row/Column Order在没有行/列顺序的情况下将二维 (2D) 数组作为一个整体进行排序
【发布时间】:2021-11-20 05:48:31
【问题描述】:

我正在处理一个二维数组,我需要将它作为一个整体进行排序,而不是像单行/一列排序那样。 说,

8   7   9   3
-2  0   4   5
1   3   6  -4

应该是这样的,

-2  -1  0  1
 2   3  4  5
 6   7  8  9

【问题讨论】:

    标签: java arrays sorting matrix multidimensional-array


    【解决方案1】:

    我做到了。 花了两天时间想出一个算法。它不是一个完美的算法,甚至可能没有得到很好的优化。但它有效。


    说明

    想法是从某个元素(例如 0,0)到数组末尾(即 a.length,a[0].length)获取最小值并将其与某个元素交换。 在这里,我创建了一个图表以更好地理解逻辑。

    我们这样做,直到我们到达最后一个元素,瞧!我们有一个有序的二维数组。


    代码 [JAVA]

    现在,我失去了两个脑细胞的有趣部分来了。守则。

    我所做的是创建一个函数,它返回数组中的最小值。 该函数有两个参数,它们是起始元素索引,即 (i,j),它应该从中运行循环以结束并返回最小值及其在列表中的索引。

    //Helper Method
    
    //row = Row Of Element To Began Loop From 
    //column = Column Of Element To Began Loop From.
    List get_min(int row,int column) 
    {
        List<Integer> l = new ArrayList<Integer>();  // List To Return with the output.
    
        int mn=a[row][column], mni=0,mnj=0;    
    
        //mni= The Row Of Minimum Element
        // mnj = The Column Of Minimum Element
    
        for(int i=row;i<a.length;i++)
        {
            for(int j=column;j<a[0].length;j++)
            {
                if(mn>a[i][j])
                {
                    mni = i;
                    mnj = j;
                    mn=a[i][j];
                }
            }
            column=0;  // This needs to be zero, just so the next time Row Updates The Loop doesn't began from the 2nd Element But 0.
        }
        l.add(mn); l.add(mni); l.add(mnj);
        return l;
    }
    

    现在我们有一个包含三个值的列表,最小元素、最小元素行、最小元素列。我们现在可以使用上面的 Helper 方法构建一个简单的交换函数。

    void sort_array()
    {
        for(int i=0; i<a.length;i++)
        {
            for(int j=0;j<a[0].length;j++)
            {
                List<Integer> l = get_min(i, j);  // List with Minimum Value As In Step 1,Step 2, Step 3
                if(a[i][j]>l.get(0))  // Check To Prevent Last Value Replacing The First Element
                {
                    //Simple Swap
                    int t = a[i][j];
                    a[i][j] = l.get(0);
                    a[l.get(1)][l.get(2)] = t;
                }
            }
        }
    } 
    

    瞧,现在你有了一个排序的二维数组。享受数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-18
      • 2016-12-27
      • 2018-07-26
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      相关资源
      最近更新 更多