2012-08-30 4 views
0

J'essaie d'utiliser le tri par insertion pour trier un tableau 2d en Java par les valeurs de la première colonne de chaque ligne. Je l'ai testé sur un tableau de taille 2 mais lorsque j'essaie le code pour la taille 3, il ne fonctionne même pas pour la boucle for. Merci pour toute aide que vous pouvez donner.tri par insertion et tableaux 2d

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

Répondre

2

Vous pouvez simplifier beaucoup et le faire fonctionner pour la taille arbitraire en utilisant le fait qu'un tableau Java 2D est vraiment un tableau de tableaux. Les rangées internes (c'est-à-dire les rangées) peuvent être déplacées en unités entières plutôt que fragmentées comme vous le faites. Comme votre code modifie l'argument passé, il n'y a pas non plus besoin de retourner le tableau. Après l'appel sortC(input), le tableau input sera trié.

En utilisant ces deux, votre code peut être réduit à

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

}