BubbleSort

Rakash

Mitglied
Hi Leute!
Ich hab mich mal wieder aufgerafft und den Java-Editor angeworfen und hänge nun etwas. Mir geht es darum Sortierverfahren, wie wir Sie im Unterricht mehr oder minder "gut" behandelt haben, besser nachzuvollziehen. Und für den Anfang habe ich mir deshalb das BubbleSort-Verfahren etwas genauer angesehen. Ich weiß, dass es nicht besonders effizient ist, doch ist es recht einfach - so sagt man zumindest.
Nur leuchtet mir nicht wirklich ein - in Anbetracht des Quelltextes - wie die Wahrheitswerte dort fungieren. Vielleicht kann mir einer mal eine "Komplett-Erläuterung" des Qelltextes geben.
Wir hatten in der Schule einen eigenen entworfen, der sehr ähnlich wirkt - nur ohne Wahrheitswerte ... aber ... schaut einfach mal drauf:

Java:
public class Sorter{
  public static void main(String[] args){
    int[] array={8, 9, 5, 2, 1, 3, 4, 7, 6,};
    new Sorter().bubbleSort(array);
    for(int i=0; i<array.length; i++){
      System.out.println(array[i]);
    }
  }
 public void bubbleSort(int[] array){
   int arrayLength = array.Length;
   boolean match = false;
   for(int i=0; i < arrayLength - 1 && !match; i++){
     match = true;
     for(int j = arrayLength - 1; j > i; j--){
       if (array[j-1] > array[j]){
        swap(array, j-1, j);
        match = false;
       }
     }
   }
 }
 public void swap(int[]array, int pos1, int pos2){
  int temp = array[pos1];
  array[pos1] = array[pos2];
  array[pos2] = temp;
 }
}



Außerdem gibt der mir gerne einen Fehler aus, wenn es um "." geht. So auch hier. Dabei wäre es auch verdammt cool, wenn ihr mir mal erklären könntet, weshalb man da diesen "." überhaupt setzt?
Code:
Sorter.java:10:27: error: cannot find symbol
   int arrayLength = array.Length;
                          ^
  symbol:   variable Length
  location: variable array of type int[]
1 error
 
Punktnotation

es muss array.length heißen

Und ich dachte, der zckt wegen dem Punkt rum. Blöde Leichtsinnsfehler. 😀

Könntest du mir trotzdem einige Dinge dazu erzählen, vor allem, was mir das "new Sorter" und die Wahrheitswerte vermitteln? ... also mehr oder weniger Schritt für Schritt sagen, was passiert? ._.
Im Großen und Ganzen begreife ich es ja, aber die einzelnen Schritte leuchten mir eben nicht so ein.

Das mit der Punktnotation lasse ich grade auf mich wirken. 😀
 
Das "new Sorter" ist meines Erachtens völlig unnötig, vermeidet aber, dass die Methoden static sein müssen in dem er ein Objekt erstellt und auf diesem sofort die Methode aufruft.

Die Wahrheitswerte sagen dir, ob noch Vertauschungen nötig sind.
 
Das "new Sorter" ist meines Erachtens völlig unnötig, vermeidet aber, dass die Methoden static sein müssen in dem er ein Objekt erstellt und auf diesem sofort die Methode aufruft.

Die Wahrheitswerte sagen dir, ob noch Vertauschungen nötig sind.

Ahhh. Verstehe.
Das erklärt auch die Verwendung von static ...

Und wenn wir uns die Schleifen angucken ... die eine Schleife durchläuft das Array von pos1 - arrayLength und die andere vom ende, also von arrayLegth bis pos1 (deshalb das j--); sehe ich das richtig?

@andgalf: danke für die seite. scheint mir recht brauchbar. 🙂
 
Und wenn wir uns die Schleifen angucken ... die eine Schleife durchläuft das Array von pos1 - arrayLength und die andere vom ende, also von arrayLegth bis pos1 (deshalb das j--); sehe ich das richtig?

Nicht ganz korrekt. Erstens läuft die innere Schleife ab array.lentgh-1, das liegt daran, dass ein Array bei pos 0 anfängt (die letzte stelle eines Arrays ist also immer die Größe des Arrays -1).
Und die innere schleife läuft nur bis i, also nur bis zur aktuellen Position der äußeren Schleife
 
Nicht ganz korrekt. Erstens läuft die innere Schleife ab array.lentgh-1, das liegt daran, dass ein Array bei pos 0 anfängt (die letzte stelle eines Arrays ist also immer die Größe des Arrays -1).
Und die innere schleife läuft nur bis i, also nur bis zur aktuellen Position der äußeren Schleife

Ah verstehe. Klingt auch logisch, weil ja im Grunde nur mit einer einem Teil des Arrays stets weiter gearbeitet wird, da der größte Wert aufsteigt.
Na gut. Dann danke soweit. 🙂

Damit kann das Thema als abgeschlossen gelten. 🙂
 

Zurück
Oben