2017-01-08 2 views
0

Mein Code funktioniert zum Sortieren von positiven und negativen Zahlen, aber ich bin mir nicht sicher, wie die Nullen sortiert werden sollen. Die Negative sollten auf der linken Seite, Nullen in der Mitte und Positive auf der rechten Seite sein. Die Reihenfolge spielt keine Rolle.Sortierung eines int-Arrays nach Vorzeichen (positiv, null, negativ) ohne Sortiermethode

+1

Haben Sie den Code in Ihrem Debugger trat? Dies wird Ihnen helfen, selbst zu bestimmen, was passieren muss. –

Antwort

1

eine Hilfs Swap-Methode verwenden, um die Nullen wie so umgehen kann:

public static int[] sortBySign(int[] array) { 
    int counter = 0; 
    for (int i = 0; i < array.length; i++) { 
    if (array[i] < 0) { 
     swap(array, counter++, i); 
    } 
    } 
    for (int i = counter; i < array.length; i++) { 
    if (array[i] == 0) { 
     swap(array, counter++, i); 
    } 
    } 
    return array; 
} 

private static void swap(int array[], int index1, int index2) { 
    int temp = array[index2]; 
    for (int i = index2; i > index1; i--) { 
    array[i] = array[i - 1]; 
    } 
    array[index1] = temp; 
} 

Probieren Sie es here!

1

Eigentlich Ihr Code nicht richtig sort die positiven Zahlen, vielleicht, weil es nicht genug Anzahl tut von iterations. Um alle Zahlen zu sortieren (einschließlich Null), würde ich empfehlen zurück zur Blase Art fallen, z.B .:

public static void sort(int[] array) { 
    for (int i = 0; i < array.length; i++) { 
     for (int j = 1; j < (array.length - i); j++) { 
      if (array[j - 1] > array[j]) { 
       int temp = array[j - 1]; 
       array[j - 1] = array[j]; 
       array[j] = temp; 
      } 
     } 
    } 
} 

Auch brauchen wir nicht zu return nichts, da die Änderungen nur auf die tatsächliche Anordnung vorgenommen werden.

bearbeiten

Eine andere Lösung das Array mit einer for-Schleife zu sortieren, (das heißt O(n) Komplexität):

public static void sort(int[] array) { 
    boolean continue = false; 
    for (int i = 0; i < array.length - 1; i++) { 
     if (array[i] < array[i + 1]) { 
      int temp = array[i]; 
      array[i] = array[i + 1]; 
      array[i + 1] = temp; // swap values 
      continue = true; 
     } 
     if (i == array.length - 2 && again) { 
      i = 0; 
      continue = false; 
     } 
    } 
} 
+0

Danke. Ich habe versucht, es so zu implementieren, dass es O (n) ist. – laura815

+0

@ laura815 Ich habe eine andere Lösung hinzugefügt. –

Verwandte Themen