sortieralgorithmen sortieren von arrays. sortierverfahren 1.sortieren durch direktes auswählen...
TRANSCRIPT
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.