0

我正在尝试使用插入排序按每行的第一列值对 Java 中的二维数组进行排序。我已经在大小为 2 的数组上对其进行了测试,但是当我尝试大小为 3 的代码时,它甚至没有运行 for 循环。感谢您提供的任何帮助。

public int[][] sortC(int[][] temp)
    {
        if (temp.length == 1)       
        {
            return temp;
        }
        else if (temp.length >= 2)
        {
               for (int i = 1; i <= temp.length - 1; i++)
               {
                   int holdRow = temp[i][0];
                   int holdCol = temp[i][1];
                   // hold past index
                   int holdRowP = temp[i - 1][0];
                   int holdColP = temp[i - 1][1];

                   int j = i;

                   while (j > 0 && holdRow < holdRowP)
                   {
                       holdRow = temp[j][0];
                       holdCol = temp[j][1];
                       // hold past index
                       holdRowP = temp[j - 1][0];
                       holdColP = temp[j - 1][1];   

                       // make single swap
                       temp[j][0] = holdRowP;
                       temp[j][1] = holdColP;

                       temp[j-1][0] = holdRow;
                       temp[j-1][1] = holdCol;

                       j--;
                   }
               }
        }

        return temp;
    }
4

1 回答 1

2

通过使用 Java 2D 数组实际上是数组数组这一事实,您可以简化很多并使其适用于任意大小。内部数组(即行)可以作为整个单元移动,而不是像您正在做的那样零碎移动。

由于您的代码正在修改传递的参数,因此也无需返回数组。

调用后sortC(input)input数组将被排序。

使用这两种方法,您的代码可以简化为

public void sortC(int[][] temp)
{
    if (temp.length >= 2)
    {
        for (int i = 1; i <= temp.length - 1; i++)
        {
            int[] hold = temp[i];
            int[] holdP = temp[i-1];

            int j = i;

            while (j > 0 && hold[0] < holdP[0])
            {
                hold = temp[j];
                holdP = temp[j-1];

                temp[j] = holdP;
                temp[j-1] = hold;

                j--;
            }
        }
    }

}
于 2012-08-30T21:57:32.117 回答