New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Sortierverfahren - Wikipedia

Sortierverfahren

aus Wikipedia, der freien Enzyklopädie

Ein Sortierverfahren ist ein Algorithmus, der dazu dient, eine Liste von Elementen zu sortieren. Voraussetzung ist, dass auf der Menge der Elemente eine strenge schwache Ordnung definiert ist, z.B. die lexikographische Ordnung von Zeichenketten oder die numerische Ordnung von Zahlen.

Es gibt verschiedene Sortierverfahren, die unterschiedlich effizient arbeiten. Die Komplexität eines Algorithmus, also die Anzahl der nötigen Operationen, wird üblicherweise in der Landau-Notation dargestellt. Einige Sortierverfahren benötigen außerdem neben dem zur Speicherung des Arrays nötigen noch weiteren Speicherplatz. Komplexität und Speicherbedarf hängen bei einigen Sortierverfahren von der anfänglichen Anordnung der Werte im Array ab, man unterscheidet dann zwischen Best Case (bester Fall), Average Case (Durchschnittsverhalten) und Worst Case (schlechtester Fall).

Man unterscheidet zudem zwischen stabilen und instabilen Sortierverfahren. Stabile Sortierverfahren sind solche, die die relative Reihenfolge von Elementen, die bezüglich der Ordnung äquivalent sind, nicht verändern, während instabile Sortierverfahren dies nicht garantieren.

Zudem unterscheidet man zwischen Sortierverfahren, die in-place (auch in situ) arbeiten, d.h. die mit einer von der Anzahl der zu sortierenden Elemente unabhängigen Menge zusätzlichen Speicherplatzes funktionieren, und solchen, die dies nicht tun (ex situ).

Und man unterscheidet auch zwischen natürlichen Sortierverfahren, die bei vorsortierten Daten schneller arbeiten als bei unsortierten Daten, und solchen, die es nicht tun. Algorithmen, bei denen der Kontrollfluss von den Daten abhängt, nennt man adaptiv und dementsprechend Sortierverfahren, die nicht von den Eingabedaten abhängen, nicht-adaptiv. Nicht-adaptive Algorithmen sind demnach besonders interessant für Hardware-Implementierungen.


Inhaltsverzeichnis

[Bearbeiten] Vergleichsbasiertes Sortieren

Allgemeine Verfahren basieren auf dem paarweisen Vergleich der zu sortierenden Elemente. Bei der Komplexitätsanalyse wird davon ausgegangen, dass der Aufwand zum Vergleich zweier Elemente konstant ist.

Sortierverfahren Best-Case Average-Case Worst-Case Stabil Rekursiv Zusätzlicher Speicherbedarf (sofern nicht in-place)
Binary Tree Sort O(n·log(n) - n) O(n·log(n)) O(n2-n) nein O(n)
Bogosort O(n) O(n·n!) unendlich nein - -
Bubblesort
(Vergleiche)
(Kopieraktionen)
O(n)
n-1
0
O(n2)
~n2/2
~n2/4
O(n2)
~n2/2
~n2/2
ja nein -
Cocktailsort (ShakerSort) O(n) O(n2) O(n2) ja -
Combsort O(n·log(n)) O(n·log(n)) O(n2) nein nein -
Gnomesort O(n)   O(n2) ja nein -
Heapsort O(n·log(n)) O(n·log(n)) O(n·log(n)) nein nein -
Insertionsort
(Vergleiche)
(Kopieraktionen)
O(n)
n
2n
O(n2)
~n2/4
~n2/4
O(n2)
~n2/2
~n2/2
ja nein -
Introsort O(n·log(n)) O(n·log(n)) O(n·log(n)) nein ja -
Mergesort O(n·log(n)) O(n·log(n)) O(n·log(n)) ja ja bei Arrays: O(n)
Quicksort O(n·log(n)) O(n·log(n)) O(n2) nein ja -
Selectionsort
(Vergleiche)
(Kopieraktionen)
O(n2)
~n2/2
3n
O(n2)
~n2/2
3n
O(n2)
~n2/2
3n
nein nein -
Shellsort   O(n1,25) O(n·log(n)2) nein nein -
Slowsort \Omega\left(n^{\frac{\log(n)}{(2+e)}}\right) O(nlog(n)/2)   ja -
Smoothsort O(n) O(n·log(n)) O(n·log(n)) nein -
Stoogesort O(n2,71) O(n2,71) O(n2,71) nein ja -
Swap-Sort O(n2)

Bei diesen Verfahren gilt das 0-1-Sortier-Lemma von Knuth: Wenn ein Sortieralgorithmus ausschließlich aus Operationen der Art "Vergleich-und-Austausch-wenn-größer" besteht und wenn von vornherein (unabhängig von den zu sortierenden Daten) feststeht, an welchen Positionen die Werte miteinander verglichen und gegebenenfalls vertauscht werden, dann gilt: Der Algorithmus sortiert genau alle Eingabedatensätze, wenn er alle Eingabedatensätze sortiert, die nur aus Nullen und Einsen bestehen. Dieses Lemma sichert zu, dass bei bestimmten Sortieralgorithmen für den Nachweis der Korrektheit die Betrachtung von 0-1 Eingaben genügt.

[Bearbeiten] Beweis der unteren Schranke für vergleichsbasiertes Sortieren

Es lässt sich beweisen, dass ein vergleichsbasiertes Sortierverfahren nicht schneller als \Omega(n\cdot \log(n)) sein kann:

Sei B der Entscheidungsbaum für die Zahlenfolge X (x1,....,xn). Da alle Permutationen von X das Ergebnis des Sortieralgorithmus sein könnten, muss der Entscheidungsbaum B mindestens n! Blätter haben. Da eine Mindestanzahl von Schritten gesucht ist, treten im Entscheidungsbaum keine unnötigen Vergleiche auf.

In einem Entscheidungsbaum mit n! Blättern beträgt die maximale und die mittlere Tiefe eines Blattes mindestens log(n!). Da eine untere Schranke gesucht ist, kann n! mittels n! \ge \left( \frac{n}{2} \right)^{n/2} nach unten hin abgeschätzt werden. Damit gilt \log(n!) \ge \left( \frac{n}{2} \right)\cdot\log\left( \frac{n}{2} \right)=\Omega(n\cdot\log(n)).

Es bleibt noch zu zeigen, dass in einem Binärbaum mit k Blättern die maximale und die mittlere Tiefe eines Blattes mindestens log(k) beträgt. Angenommen B sei ein Binärbaum für welchen die obige Aussage nicht gilt. Seien T1 und T2 Teilbäume eines Binärbaumes mit k>2 Blättern. Für die Anzahl der Blätter k1 in T1 bzw. k2 in T2 gilt nun offensichtlich k1 < k, k2 < k und k1+k2 =k. Für die Tiefe jedes Blattes, bezogen auf die Wurzel von B, gilt: ...

\mbox{tiefe}_{mittlere}(B)=\frac{k_1}{k}\cdot(\mbox{tiefe}_{mittlere}(T_1)+1)+\frac{k_2}{k}\cdot(\mbox{tiefe}_{mittlere}(T_2)+1)
\ge \frac{k_1}{k}\cdot(\log(k_1)+1)+\frac{k_2}{k}\cdot(\log(k_2)+1) = \frac{1}{k}\cdot(k_1\cdot\log(2\cdot k_1)+k_2\cdot \log(2\cdot k_2))

Das Minimum dieser Funktion liegt nun bei k1 + k2 = k und k1 = k2 = k/2. Eingesetzt in obige Formel ergibt das:

\mbox{tiefe}_{mittlere}(B) \ge \frac{1}{k}\cdot(\frac{k}{2}\cdot\log(k)+\frac{k}{2}\cdot\log(k))=\log(k).

Dies ergibt einen Widerspruch zur Annahme, womit obige Aussage bewiesen ist.

[Bearbeiten] Nicht-vergleichsbasiertes Sortieren

Trotz des oben angegebenen Beweises ist es möglich, bestimmte Daten in linearer Zeit zu sortieren, allerdings nicht vergleichsbasiert. Dazu muss es sich um Daten handeln, bei denen sich aus dem Schlüssel eines Elementes auch ohne Vergleich mit den Schlüsseln anderer Elemente Information über die Position des Elementes in der sortierten Folge gewinnen lassen. In diesem Fall kann ein spezialisiertes Verfahren schneller sein.

Sortierverfahren Komplexität Stabil Zusätzlicher Speicherbedarf
Bucketsort O(n+k) ja O(n+k)
Countingsort O(m+n) ja O(N + M)
Radixsort O(n+k) ja O(n)

[Bearbeiten] Sortierung nach Beziehungen

Wenn nicht mehr nach Eigenschaften, sondern nur noch nach paarweisen Beziehungen sortiert werden kann, so spricht man von einer topologischen Sortierung. Dies ist beispielsweise der Fall, wenn Aufgaben erledigt werden müssen, manche Aufgaben aber unbedingt vor anderen durchzuführen sind, bei anderen jedoch die Reihenfolge keine Rolle spielt.

Für das topologische Sortieren gibt es Algorithmen, deren Laufzeit von der Anzahl der Beziehungen O(m) abhängt. Topologisches Sortieren ist nicht möglich, wenn gegenseitige (zyklische) Abhängigkeiten bestehen. Eine topologische Sortierung muss nicht eindeutig sein.

Wenn die Beziehungen vollständig sind, also für je zwei Objekte eine Abhängigkeit vorgegeben ist, so geht die topologische Sortierung in eine gewöhnliche Sortierung über. Das Laufzeitverhalten der Algorithmen bei n Objekten ist dann O(1).

[Bearbeiten] Literatur

[Bearbeiten] Weblinks

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu