0

挿入ソートを使用して、Java の 2 次元配列を各行の最初の列の値でソートしようとしています。サイズ 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 に答える