BubbleSort

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Voraussetzungen

Mit der Datenstruktur Feld haben wir bereits eine große Anzahl von Zufallszahlen generiert und ausgegeben.
Dazu wurde die Funkion zufallszahl implementiert:

Weiterhin halten wir die bekannten Funktionen zum Erzeugen bzw. Ausgeben eines zufälligen Datenfeldes bereit:

function erzeugen(von, bis, anz)
function ausgabe(feld)

Wir testen zunächst die Generierung und Ausgabe eines umfangreichen Datenfeldes mit Zufallszahlen:

Modifizierte Maximumsuche

Zunächst wollen wir die sequenzielle Suche nach dem größten Feldelement eines numerischen Datenfeldes modifizieren.
Wir benutzen dazu den folgenden Algorithmus:

  • Vergleiche die beiden ersten Feldelemente.
  • Steht das größere Element vor dem kleineren, so vertausche die Positionen beider Elemente.
  • Verfahre derart mit allen weiteren benachbarten Feldelementen.
  • Gib das letzte Feldelement zurück - es ist das größte Element des Datenfeldes.

Implementiere diesen Algorithmus.

 

Quelltext überprüfen:

BubbleSort-Algorithmus

Wir stellen uns nun vor, dass unser Datenfeld der modifizierten Maximumsuche unterzogen und anschließend das letzte Feldelement gedanklich abgetrennt wird. Eine erneute Anwendung der Maximumsuche auf das Restfeld führt dazu, dass das zweitgrößte Element an vorletzter Stelle steht.
Wir erkennen: Die Mehrfachanwendung der modifizierten Maximumsuche auf ein Datenfeld, dessen größter Feldindex schrittweise dekrementiert (zurükgesetzt) wird, führt zum Sortieren des gesamten Datenfeldes.
Jedes Teil-Maximum rückt dabei schrittweise, ähnlich einer Luftblase, die in einem Sumpf aufsteigt, an seine korrekte Stelle. Wir nennen deshalb diesen Sotieralgorithmus BubbleSort.

 

Quelltext überprüfen:

Ungeordnete Zufallszahlen:

 

Geordnete Zufallszahlen:

Aufwandsbetrachtungen

Empirische Untersuchungen

Wie wirken sich große Datenmengen auf die Dauer des Sotiervorgangs aus?
Wir wollen den sogenannten Zeitaufwand des BubbleSort-Algorithmus untersuchen. Dazu soll stark vereinfacht angenommen werden, dass jeder Vergleich zweier benachbarter Feldelemente sowie der mögliche Tausch dieser Feldelemente je einem Zeittakt entsprechen.
Diese Zeittakte sollen in Abhängigkeit der Anzahl der zu sortierenden Feldelemente ermittelt werden.

Wegen der beträchlichen Streuung der Zählergebnisse soll der Mittelwert aus Mehrfachanwendungen der Funktion sortAufwand ermittelt werden. Vervollständige die entsprechende Funktion.

Theoretische Untersuchungen

Wir überlegen uns zunächst, wie viele Vergleiche der Feldelemente insgesamt durchgeführt werden:

BubbleSort-Schema1.gif

Das Schema lässt sich mit einer Dreieckfläche vergleichen. Damit sind also $\tfrac{n}{2} (n-1)$ Vergleiche notwendig.
Zum Tauschen der Feldelemente sind ähnliche Überlegungen möglich. Im Mittel kann man aber davon ausgehen, dass das Tauschen nur bei der Hälfte aller Vergleiche notwendig ist.
Damit ist folgende Abschätzung für den Gesamtaufwand $T(n)$ möglich:

$T(n) = \underbrace{\frac{n}{2} \cdot (n-1)}_{Vergleiche} + \underbrace{\frac{1}{2} \cdot \frac{n}{2} \cdot (n-1)}_{Vertauschungen} = \frac{3}{4} \cdot n \cdot (n-1)$

$T(n) \approx \frac{3}{4} \cdot n^2$   bzw.

$T(n) \sim n^2$

Das Sortieren mit dem BubbleSort-Algorithmus erfolgt mit quadratischem Zeitaufwand.

Grafische Auswertung

Um unsere theoretischen Betrachtungen zu bestätigen, wollen wir die empirischen Ergebnise visualisieren.

Zum Weiterarbeiten

GnomeSort?

GnomeSort

In einem Garten sind Blumentöpfe in einer Reihe aufgestellt. Gartenzwerge sollen sie nun der Größe nach aufsteigend sortieren. Sie benutzen dazu den folgenden Algorithmus:

  • Beginne links und vergleiche die beiden ersten Töpfe.
  • Wenn sie nicht in der korrekten Reihenfolge stehen, vertausche die beiden Töpfe und gehe einen Schritt nach links. Ist der Schritt nach links nicht möglich, gehe einen Schritt nach rechts.
  • Gehe auch in jedem anderen Fall einen Schritt nach rechts.
  • Wiederhole diesen Vergleich benachbarter Töpfe bis zum letzten Blumentopf.

Implementieren diesen Algorithmus.

Zur Problemlösung.

Persönliche Werkzeuge