View
151
Download
6
Category
Tags:
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