24
Sortieralgorithmen Sortieren von Arrays

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

Embed Size (px)

Citation preview

Page 1: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

Sortieralgorithmen

Sortieren von Arrays

Page 2: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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‘

Page 3: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 4: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 5: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 6: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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

Page 7: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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)

Page 8: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 9: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 10: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 11: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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

Page 12: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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).

Page 13: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 14: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 15: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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

Page 16: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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

Page 17: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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

Page 18: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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

Page 19: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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.

Page 20: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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]

Page 21: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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!

Page 22: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

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

Page 23: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

Sortieralgorithmen im Internet

Informatikseite von Andreas Rittershofer

Oldenburger Lernprogramme zur Informatik (OLLI)

Sortierverfahren MathPrism

Page 24: Sortieralgorithmen Sortieren von Arrays. Sortierverfahren 1.Sortieren durch direktes Auswählen Selection Sort Selection Sort 2.Sortieren durch direktes

Literatur

Sedgewick, Robert: Algorithmen, Addison-Wesley

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