2016-03-24 2 views
0

Bonjour, voici ma méthode pour un tri d'insertion de tableau de chaînes. Il renvoie des résultats faux à la console. Principalement juste un élément de tableau encore et encore. Toute aide qui a besoin d'être changée est grandement appréciée. Merci.Chaîne de chaînes de tri d'insertion, pas de tri correct

public static void insertionSort(String[] a, int count) { 
     int i, j; 
     String Value; 
     for (i = 1; i < count; i++) { 
      Value = a[i]; 
      j = i - 1 ; 
      while (j >= 0 && a[j].compareTo(Value)> 0) { 
        a[j+1] = a[j]; 
        j=j-1; 
      } 
      a[i+1] = Value; 

     } 
     } 

Répondre

0

Le problème est a[j+1] = a[j];

Votre origine un [ j + 1] serait perdu, il vous suffit de le remplacer, sans le déplacer/le stocker, il est juste remplacé par un [j] et se perdre ...

Je voudrais modifier votre code comme suit: Trouvez la position de la valeur courante à insérer, permutez-le avec l'élément correspondant à cette position, puis inversez la élément en position correcte

public static void insertionSort(String[] a, int count) { 
 
     int i, j; 
 
     String Value; 
 
     for (i = 1; i < count; i++) { 
 
      Value = a[i]; 
 
      j = i - 1 ; 
 
      int p = i; 
 
      while (j >= 0 && a[j].compareTo(Value)> 0) {  
 
       p = j--; 
 
      } 
 
      // p now is correct position to be inserted 
 
      swap(a[p], a[i]); 
 
      // Now loop the original a[p] back to a[p+1] 
 
      for(int z = i; z > p; z--){ 
 
       swap(a[z], a[z-1]); 
 
      } 
 
     } 
 
}

3

vérifier le code fonctionne très bien

public static void insertionSort(int array[]) { 
     int n = array.length; 
     for (int j = 1; j < n; j++) { 
      int key = array[j]; 
      int i = j-1; 
      while ((i > -1) && (array [i] > key)) { 
       array [i+1] = array [i]; 
       i--; 
      } 
      array[i+1] = key; 
      printNumbers(array); 
     } 

et d'imprimer le nombre i utilise

printNumbers de fonction (tableau)
private static void printNumbers(int[] input) { 

     for (int i = 0; i < input.length; i++) { 
      System.out.print(input[i] + ", "); 
     } 
     System.out.println("\n"); 
    } 
+0

Merci pour la réponse. Je viens de trouver une solution ici [link] (http://java67.blogspot.com/2014/09/insertion-sort-in-java-with-example.html) – CAKE

1

Le code ci-dessous œuvres.

public static void insertionSort(String[] a, int count) { 
      int i, j; 
      String Value; 
      for (i = 1; i < count; i++) { 
       Value = a[i]; 
       j = i; 
       while (j > 0 && a[j-1].compareTo(Value)> 1) { 
         a[j] = a[j-1]; 
         j--; 
       } 
       a[j] = Value;