2016-03-24 5 views
0

Hallo, das ist meine Methode für eine String Array Insertion sort. Es gibt gefälschte Ergebnisse an die Konsole zurück. Hauptsächlich immer nur ein Array-Element. Jede Hilfe, die geändert werden muss, wird sehr geschätzt. Danke.Insertion Sort String Array, nicht nach rechts sortieren

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; 

     } 
     } 

Antwort

0

Das Problem ist a[j+1] = a[j];

Ihr Original a [ j + 1] wäre verloren, du würdest es einfach ersetzen, ohne es zu bewegen/zu speichern, es ist nur si mply ersetzt durch [j] und verloren gehen ...

Ich würde Ihren Code wie folgt ändern: Finden Sie die Position des aktuellen Werts eingefügt werden, tauschen Sie es mit dem Element an dieser Position, dann tauschen Sie das zurück Element in die richtige Position

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

Prüfung funktioniert der Code feinen

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

und die Anzahl drucken i Funktion printNumbers verwenden (Array)

private static void printNumbers(int[] input) { 

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

Danke für die Antwort. Ich habe hier gerade eine Lösung gefunden [link] (http://java67.blogspot.com/2014/09/insertion-sort-in-java-with-example.html) – CAKE

1

Der folgende Code funktioniert.

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;