GnomSort

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Loading

Inhaltsverzeichnis

Algorithmus

In einem Garten sind Bumentö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.
  • Stehen sie in der richtigen Reihenfolge gehe ein Schritt nach rechts.
  • Vertausche die beiden Töpfe, wenn sie nicht in der korrekten Reihenfolge stehen, und gehe einen Schritt nach links.
    Ist der Schritt nach links nicht möglich, gehe ein Schritt nach rechts.
  • Wiederhole das Sortieren bis zum letzten Blumentopf.

Die Größe der Blumentöpfe wird mit Zufallszahlen festgelegt:

Da keine Indizierung der Listenelemente möglich ist, wird der Algorithmus mit den beiden Listen ls1 und ls2 implementiert. Die Liste ls1 enthält die unsortierte Zahlenliste. Mit ls2 wird die sortierte Zahlenlise gebildet. Beim Schritt nach rechts wird das erste Listenelement von ls1 der Liste ls2 vorangestellt. Analog wird beim Schritt nach links das erste Listenelement von ls2 zurückgenommen und ls1 vorangestellt:

 

Quelltext überprüfen:

Ungeordnete Zufallszahlen:

 

Geordnete Zufallszahlen:

Hinweis: Um mehrere Zeichenflächen nutzen zu können, muss die Prozedur balkendiagramm mit einem zusätzlichen Parameter ausgestattet werden, der einer fortlaufenden Nummerierung entspricht:

(balkendiagramm
  <ls>       ; Liste mit Zahlenwerten   
  <nr>)      ; fortlaufende Nummerierung des Balkendiagramms

Effizienz von GnomSort

Average-Case-Experimente

Wir definieren unseren GnomSort-Algorithmus mit einem "eingebauten" (Zeittakt-)Zähler:

Im Weiteren wollen wir uns nur auf die Zählergebnisse unseres "Zeittaktmessers" konzentrieren.
Dazu sollen die Wiederholungen des Experimentes automatisiert werden:

Schließlich sollen die Ergebnisse unserer empirischen Untersuchung wieder im Balkendiagramm visualisiert werden.

Achtung! Mit kleinen Wiederholraten und etwas Geduld experimentieren!

Die empirischen Untersuchungen zeigen im Mittel offensichtlich einen quadratischen Zeitaufwand von GnomSort.
Es gilt:

average case:     bzw.

Best- und Worst-Case-Experimente

Zur Untersuchung dieser Spezialfälle wollen wir die beiden Prozeduren gnomsort-mehrfach und experiment variabelstellig erweitern. Zusätzlich können nun beliebig viele Prozeduren übergeben, die sich auf Listen anwenden lassen. Damit kann beispielsweise die zufällige Zahlenliste "vorsortiert" oder vor dem Sortiervorgang ungekehrt werden:

GnomSort: best-case

 

GnomSort: worst-case

Für die beiden Spezialfälle gilt:

best case:     bzw.
worst case:     bzw.

Die Effizienz von GnomSort verbessert sich also, wenn schon eine gewisse Ordnung ("Vorsortierung") vorliegt.
Im ungünstigsten Fall ist GnomSort etwas uneffizienter als MinSort.

Persönliche Werkzeuge