350 likes | 775 Views
Sortieralgorithmen. Sortieren von Arrays. Sortierverfahren. Sortieren durch direktes Auswählen ‚Selection Sort‘ Sortieren durch direktes Einfügen ‚Insertion Sort‘ Sortieren durch direktes Austauschen ‚Bubble Sort‘ Sortieren durch Zerlegen ‚Quicksort‘. Selection Sort 1.
E N D
Sortieralgorithmen Sortieren von Arrays
Sortierverfahren • Sortieren durch direktes Auswählen‚Selection Sort‘ • Sortieren durch direktes Einfügen‚Insertion Sort‘ • Sortieren durch direktes Austauschen‚Bubble Sort‘ • 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 • Programm FOR i:=1 TO n-1 DOBEGIN „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 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 • Programm FOR i:=2 TO n DOBEGIN x:=a[i]; „füge x am entsprechenden Platz in a[1]..a[n] ein“ END.
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 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 eineListe 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!
Literatur • Sedgewick, Robert: Algorithmen, Addison-Wesley • Wirth, Niklaus: Algorithmen und Datenstrukturen, B.G.Teubner, Stuttgart-Leipzig-Wiesbaden.