Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen...

Preview:

Citation preview

Sortieralgorithmen

Sortieren von Arrays

Sortierverfahren

1.Sortieren durch direktes Auswählen‚Selection Sort‘

2.Sortieren durch direktes Einfügen‚Insertion Sort‘

3.Sortieren durch direktes Austauschen‚Bubble Sort‘

4.Sortieren durch Zerlegen‚Quicksort‘

Selection Sort 1

alternative Bezeichnungen:Sortieren durch Austauschen, Sortieren durch Auswählen

Idee– Suche zunächst das kleinste, danach das zweitkleinste

Item usw.

– Stelle damit sukzessiv eine sortierte Liste auf.

Selection Sort 2

Methode– Wähle unter A[1], A[2], ..... , A[N] das kleinste Item.

– Vertausche A[1] mit diesem; damit hat es seinen endgültigen Platz.

– Verfahre mit der Restliste A[2], ..... , A[N] entsprechend usw.

Selection Sort 3

ProgrammFOR i:=1 TO n-1 DO

BEGIN „weise x das kleinste Element von a[i]..a[n] zu, weise seinen Index k zu“;

„Vertausche a[i] und a[k]“

END.

Selection Sort 4

Anfangswerte 44 55 12 42 94 18 06 67

i=1 06 55 12 42 94 18 44 67

i=2 06 12 55 42 94 18 44 67

i=3 06 12 18 42 94 55 44 67

i=4 06 12 18 42 94 55 44 67

i=5 06 12 18 42 44 55 94 67

i=6 06 12 18 42 44 55 94 67

i=7 06 12 18 42 44 55 67 94

Selection Sort 5

Effizienzanalyse Die Zahl C der Vergleiche der Schlüssel ist

unabhängig von der ursprünglichen Ordnung:C = (n2–n)/2

Die Zahl M der Bewegungen ist mindestensM [min] = 3*(n-1) bei ursprünglich geordneten Schlüsseln, und höchstensM [max] = trunc(n2/4) + 3*(n-1), falls die Schlüssel ursprünglich in umgekehrter Reihenfolge sind.

Im Mittel erhalten wir: M [mit] = n*(ln n + 0,57)

Insertion Sort 1

alternative Bezeichnung:Sortieren durch Einfügen

Idee– Beginne mit dem ersten Item als bereits sortierter

Teil-Liste.

– Ordne das erste Item der unsortierten Restliste in die sortierte Teilliste ein.

Insertion Sort 2

Methode– Bilde mit A[1] eine erste sortierte Teil-Liste.

– Füge A[2] darin so ein, daß die erweiterte Teil-Liste wieder sortiert ist.

– Wenn A[1], A[2], ..... , A[k] eine sortierte Teil-Liste sind, dann füge A[k+1] ein.

Insertion Sort 3

ProgrammFOR i:=2 TO n DO

BEGINx:=a[i];„füge x am entsprechenden Platz in a[1]..a[n]

ein“

END.

Insertion Sort 4

Anfangswerte 44 55 12 42 94 18 06 67

i=2 44 55 12 42 94 18 06 67

i=3 12 44 55 42 94 18 06 67

i=4 12 42 44 55 94 18 06 67

i=5 12 42 44 55 94 18 06 67

i=6 12 18 42 44 55 94 06 67

i=7 06 12 18 42 44 55 94 67

i=8 06 12 18 42 44 55 67 94

Insertion Sort 5

Effizienzanalyse Die Zahl C[i] der Vergleiche von Schlüsseln ist

höchstens i-1 und somit – unter Annahme, dass alle Permutationen gleich wahrscheinlich sind – im Mittel i/2.Die Zahl M[i] der Bewegungen ist C[i]+2 (inkl. Marke):

C [min] = n-1 M [min] = 3*(n-1)C [max] = ((n2 + n)/2) – 1 M [max] = (n2 + 3n-4)/2C [mit] = (n2 + n-2)/4 M [mit] = (n2 + 9n-10)/4

Die kleinsten Zahlen kommen bei bereits geordneten Elementen vor; die schlimmsten Fälle treten ein, wenn die Elemente zu Beginn in umgekehrter Reihenfolge angeordnet sind (natürliches Verhalten).

Bubble Sort 1

alternative Bezeichnung:Sortieren durch lokales Vertauschen

Idee– Durch Vertauschen zweier Nachbarn, die nicht in der

richtigen Reihenfolge stehen, wird der Sortierzustand besser.

– Mache das so oft, bis die Liste sortiert ist.

Bubble Sort 2

Methode– Durchlaufe die Liste von links nach rechts.

– Wenn dabei A[i] und A[i+1] in falscher Reihenfolge stehen, vertausche sie.

– Wiederhole das solange bis die Liste sortiert ist.

Bubble Sort 3

Anfangswerte 44 55 12 42 94 18 06 67

i=2 44 12 42 55 18 06 67 94

i=3 12 42 44 18 06 55 67 94

i=4 12 42 18 06 44 55 67 94

i=5 12 18 06 42 44 55 67 94

i=6 12 06 18 42 44 55 67 94

i=7 06 12 18 42 44 55 67 94

i=8 06 12 18 42 44 55 67 94

Bubble Sort 4

Effizienzanalyse Zahl der Vergleiche:

C = (n2 – n)/2

Zahl der Bewegungen:

M [min] = 0M [max] = 3*(n2 - n)/2M [mit] = 3*(n2 - n)/4

Quicksort 1 alternative Bezeichnungen: Vertauschen über große

Entfernungen, Partition Exchange Sort Idee

– Divide et Impera-Prinzip:– Zerlegung in eine Liste mit allen "kleinen" und eine

Liste mit allen "großen" Items– Sortiere beide Teil-Listen getrennt

(rekursiv nach dem selben Prinzip)– Baue aus den Teilen wieder eine Gesamtliste zusammen

Quicksort 2

Methode– Wähle unter A[1], A[2], ..... , A[N] ein Pivot-Element p aus.

– Zerlege mit p die Liste in zwei Teil-Listen L1 und L2

– Liste L1 enthält nur Items A[i] < p

– Liste L2 enthält nur Items A[i] > p

Quicksort 3

Methode (Fortsetzung)– Nach der Zerlegung wird das Pivot-Element zwischen L1

und L2 gestellt. Es hat dort seinen endgültigen Platz erreicht.

– Die beiden Teil-Listen werden rekursiv nach dem selben Verfahren sortiert.

– Zur Zusammenfassung der Teil-Listen sind keine weiteren Maßnahmen nötig.

Quicksort 4

Wahl des Pivot-Elements p– Wunsch: p so wählen, daß die Teil-Listen gleich groß

werden.

– häufige Methoden zur Wahl von p:

∗ letztes Item

∗ erstes Item

∗ zufällig gewähltes Item

∗ Median von drei Items, z.B. von A[1], A[N/2] und A[N]

Quicksort 5

Effizienzanalyse Zahl der Vergleiche im günstigsten Fall:

C = n*log(n)

Zahl der Bewegungen im günstigsten Fall:M = (n*log(n )/6

Natürlich kann man nicht immer erwarten, immer das mittlere Element zu treffen (Wahrscheinlichkeit = 1/n). Bei zufälliger Wahl der Grenze ist die Leistung von Quicksort aber nur um den Faktor 2*ln(2) = 1,39 schlechter als im besten Fall!

Ein Vergleich der Sortiermethoden

SelectionSort

C [mit] (n2–n)/2

M [mit] n*(ln n + 0,57)

InsertionSort

C [mit] (n2+n-2)/2

M [mit] (n2 –9n -10)/4

Bubble

Sort

C [mit] (n2-n)/2

M [mit] (n2-n)*0,75

Quick

Sort

C [mit] n*log(n)*1,39

M [mit] (n*log(n))/6

Sortieralgorithmen im Internet

Informatikseite von Andreas Rittershofer

Oldenburger Lernprogramme zur Informatik (OLLI)

Sortierverfahren MathPrism

Literatur

Sedgewick, Robert: Algorithmen, Addison-Wesley

Wirth, Niklaus: Algorithmen und Datenstrukturen, B.G.Teubner, Stuttgart-Leipzig-Wiesbaden.

Recommended