Logo Logo
InfoHome Themen Projekte Links Software
Themen
JavaHamster
BlueJ
Java
Sprachelemente
Abstrakte Datentypen
Swing
Sortieren
Binäre Suche
InsertionSort
SelectionSort
BubbleSort
ShakerSort
Quicksort
MergeSort
Komplexität
HTML
XHTML
CSS
XML
Datenbanken
MySQL
Theoretische Informatik
PHP
Kara
Lego-Roboter
Algorithmen

BubbleSort

Bubblesort ist ein einfacher, stabiler Sortieralgorithmus, der eine Reihe von linear angeordneten Elementen (z.B. Zahlen) der Größe nach anordnet.

Prinzip

Der Algorithmus vergleicht der Reihe nach zwei benachbarte Elemente und vertauscht sie, falls sie in der falschen Reihenfolge vorliegen. Dieser Vorgang wird solange wiederholt, bis keine Vertauschungen mehr nötig sind. Hierzu sind in der Regel mehrere Durchläufe erforderlich.

Je nachdem, ob auf- oder absteigend sortiert wird, steigen die kleineren oder größeren Elemente wie Blasen im Wasser (daher der Name) immer weiter nach oben, d.h. an das Ende der Reihe. Auch werden immer zwei Zahlen miteinander in "Bubbles" vertauscht.

Beispiel

Eine Reihe von 5 Zahlen soll aufsteigend sortiert werden.

Die fett gedruckten Zahlen werden jeweils verglichen. Ist die linke größer als die rechte, so werden beide vertauscht; das Zahlenpaar ist dann blau markiert.

55 07 78 12 42  1.Durchlauf
07 55 78 12 42
07 55 78 12 42
07 55 12 78 42 07 55 12 42 78 2.Durchlauf
07 55 12 42 78
07 12 55 42 78
07 12 42 55 78 3.Durchlauf
07 12 42 55 78
07 12 42 55 78 4.Durchlauf
07 12 42 55 78 Fertig sortiert.

Implementation

/*
 * BubbleSort
 *
 * Alle verwendeten Methoden sowie das zu sortierende Zahlenfeld
 * werden als static definiert und sind somit sofort verfügbar,
 * ohne dass man erst ein Objekt der Klasse BubbleSort erzeugen muss.
 *
 */
public class BubbleSort {
   
    // das zu sortierende Zahlenfeld
    static int[] zahlen = {45,22,20,3,2,1};
   
    // vertauschen der Zahlen an den Positionen index1 bzw. index2
    static void tausche(int index1, int index2){
        int temp = zahlen[index1];
        zahlen[index1] = zahlen[index2];
        zahlen[index2] = temp;
    }
   
    // Methode zur Ausgabe der Zahlenfolge auf der Konsole
    static void zeigeZahlenfolge(){
        for(int k=0; k<zahlen.length; k++) {
            System.out.print(" " + zahlen[k]);
        }
        System.out.println();
    }
   
    public static void main(String[] args) {

        boolean getauscht;
        int i = 0;
       
        do {
            getauscht = false;

            // innere Schleife für einen Array-Durchlauf
            // die Länge des zu durchlaufenden Arrays verkürzt
            // sich nach jedem Schleifendurchlauf um ein Element.
            for(int j=0; j<zahlen.length-1-i; j++) {
                // jede Zahl wird mit ihrem Nachfolger verglichen
                if(zahlen[j]>zahlen[j+1]) {
                    // und ggf. mit diesem vertauscht
                    tausche(j, j+1);
                    // merken, dass getauscht wurde
                    getauscht = true;
                }
            }
           
            // Zahlenfolge ausgeben
            zeigeZahlenfolge();
            // Zählvariable erhöhen
            i++;
           
        // äußere Schleife abbrechen, wenn nicht mehr getauscht wurde
        // oder wenn das unsortierte Teilarray nur noch aus einem Element besteht.
        } while(i<zahlen.length-1 && getauscht == true);

    }
       
}
 

 

» drucken: pdf | html

© 2004-2024 M. Blanke · Ursulaschule · Kleine Domsfreiheit 11-18 · 49074 Osnabrück