2012-08-30 61 views
0

我試圖使用插入排序來排序Java中的每個行的第一列值的二維數組。我已經測試了它的大小爲2的數組,但是當我嘗試使用大小爲3的代碼時,它甚至不運行for循環。感謝您提供任何幫助。插入排序和2維數組

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; 
    } 

回答

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--; 
      } 
     } 
    } 

}