# Stabilität (Sortierverfahren)

Ein stabiles Sortierverfahren ist ein Sortieralgorithmus, der die Reihenfolge der Datensätze, deren Sortierschlüssel gleich sind, bewahrt.
Wenn bspw. eine Liste alphabetisch sortierter Personendateien nach dem Geburtsdatum neu sortiert wird, dann bleiben unter einem stabilen Sortierverfahren alle Personen mit gleichem Geburtsdatum alphabetisch sortiert.
Will man mit einem instabilen Sortierverfahren, etwa Quicksort, sortieren und dabei die Reihenfolge der Datensätze mit gleichem Schlüssel beibehalten, so kann man sich damit behelfen, dass man die Datensätze um eine Reihenfolgenummer erweitert und diesem Feld den niedrigsten Rang im Sortierschlüssel gibt. Weniger aufwändig ist es aber, ein stabiles Sortierverfahren zu benutzen.
Stabile und instabile Sortierverfahren verhalten sich gleich, wenn die Multimenge der Schlüssel in der Eingabe eine Menge ist, es also keine Duplikate unter den Schlüsseln gibt; ebenso, wenn Datensätze mit gleichem Schlüssel in keiner Weise unterscheidbar sind – beispielsweise, weil der Schlüssel den ganzen Datensatz umfasst. Eine Multimenge von Zahlen oder Namen etwa kann man mit einem stabilen oder instabilen Sortierverfahren sortieren (angenommen, dass die Namen z. b. alphabetisch sortiert werden und nicht z. b. nach Länge), das Ergebnis ist immer gleich:

## Beispiele

Stabiles oder instabiles Sortierverfahren (keine Duplikate):
| Carla | → | Annette |
| Annette | → | Birgit |
| Birgit | → | Carla |
Stabiles oder instabiles Sortierverfahren (nur Schlüssel):
| 4 | → | 1 |
| 3 | → | 2 |
| 5 | → | 3 |
| 3 | → | 3 |
| 2 | → | 3 |
| 1 | → | 4 |
| 3 | → | 5 |
Kombiniert man jedoch etwa Namen und Zahlen zu je einem Datensatz und sortiert nur nach einem Teilschlüssel, etwa nach Zahlen, dann existieren bei gleichen Schlüsseln verschiedene Möglichkeiten für die Reihenfolge. Ein stabiles Verfahren behält bei gleichen Schlüsseln die Originalreihenfolge der Namen bei, etwa
Stabiles Sortierverfahren nach Zahlen:
| 1 Anton | → | 1 Anton |
| 4 Karl | → | 1 Paul |
| 3 Otto | → | 3 Otto |
| 5 Bernd | → | 3 Helmut |
| 3 Helmut | → | 4 Karl |
| 8 Alfred | → | 5 Bernd |
| 1 Paul | → | 8 Alfred |
Instabiles Sortierverfahren nach Zahlen:
| 1 Anton | → | 1 Anton | oder | 1 Paul | oder | 1 Anton | oder | 1 Paul |
| 4 Karl | → | 1 Paul | oder | 1 Anton | oder | 1 Paul | oder | 1 Anton |
| 3 Otto | → | 3 Otto | oder | 3 Otto | oder | 3 Helmut | oder | 3 Helmut |
| 5 Bernd | → | 3 Helmut | oder | 3 Helmut | oder | 3 Otto | oder | 3 Otto |
| 3 Helmut | → | 4 Karl | oder | 4 Karl | oder | 4 Karl | oder | 4 Karl |
| 8 Alfred | → | 5 Bernd | oder | 5 Bernd | oder | 5 Bernd | oder | 5 Bernd |
| 1 Paul | → | 8 Alfred | oder | 8 Alfred | oder | 8 Alfred | oder | 8 Alfred |
Bei instabilem Sortieren kann Paul vor Anton oder Helmut vor Otto zu stehen kommen, also 2 × 2 = 4 Möglichkeiten; darunter ist (wie in der zweiten Spalte gezeigt) auch die Reihenfolge möglich, wie sie ein stabiles Sortieren garantiert erbringen würde.

## Anwendung in der Datenverarbeitung

In der Informatik kommen sehr häufig Tabellen vor, d. h. Sequenzen (Ansammlungen, Dateien) von in Felder eingeteilten Datensätzen, bei denen jeder Datensatz für eine Entität und ein Feld für ein Merkmal dieser Entität steht. Viele Anwendungsprogramme, z. B. Datenbanken, und Tabellenkalkulationsprogramme unterstützen die Auswahl von einzelnen Merkmalen (Spalten) als Sortierbegriff (Schlüssel).
Ein kombinierter Sortierschlüssel aus zwei Spalten (z. B. Dateityp, Dateigröße) führt zum selben Ergebnis wie zwei Sortierungen nach jeweils einer Spalte, und zwar im ersten Sortierlauf nach Dateigröße und im zweiten Lauf nach Dateityp. Dabei muss der zweite Sortierlauf die durch den ersten Lauf erzeugte Ordnung im oben erläuterten Sinn erhalten, d. h. der zweite Lauf muss stabil sortieren.
Beispiel: Dateimanager (ähnlich dem Windows-Explorer):
| Dateiname | Dateityp | Änderungsdatum | Dateigröße |
| a | doc | 1999 | 20 |
| u | doc | 2018 | 70 |
| k | txt | 2013 | 25 |
| c | doc | 2013 | 15 |
| r | txt | 1800 | 20 |
Bei den Einzelsortierungen ist nach den niedrigrangigen Schlüsseln (Feldern) zuerst zu sortieren. Eine solche Einzelsortierung kann durch einen Klick für aufsteigend (nach dem Sortierlauf angezeigt als ▴) oder stattdessen zwei Klicks für absteigend (▾) auf den Feldnamen in der Titelzeile veranlasst werden.

### Bemerkung

Wenn der Dateimanager stabil sortiert, dann ist nach einem Klick auf die Spalte Dateityp die Reihenfolge der Werte in der Spalte Dateiname wie folgt: a, u, c, k, r.
Wie viele verschiedene Arten von Sortierungen gibt es bei 4 Spalten und stabilem Sortieren maximal?
Wenn der Dateimanager immer stabil sortiert, dann ist jede Art von Sortierung nach jeder der
    ${\binom {4}{4}}\cdot 4!+{\binom {4}{3}}\cdot 3!+{\binom {4}{2}}\cdot 2!+{\binom {4}{1}}\cdot 1!=24+24+12+4=64$
Kombinationen und Reihenfolgen der 4 Felder gleichwertig zu einer passend ausgewählten Abfolge von maximal 4 Sortierungen nach einem einzelnen Feld. Wenn es jeweils noch auf die Sortierrichtung (aufsteigend oder absteigend) ankommt, dann sind
    ${\binom {4}{4}}\cdot 2^{4}\cdot 4!+{\binom {4}{3}}\cdot 2^{3}\cdot 3!+{\binom {4}{2}}\cdot 2^{2}\cdot 2!+{\binom {4}{1}}\cdot 2^{1}\cdot 1!=384+192+48+8=632$
Kombinationen möglich.

## Beispiele

Stabile Sortierverfahren:
* Binary Tree Sort
* Bubblesort
* Countingsort
* Cocktailsort
* Gnomesort
* Insertionsort
* Mergesort
* Radixsort
* Shakersort
Instabile Sortierverfahren:
* Bogosort
* Combsort
* Heapsort
* Introsort
* Quicksort
* Selectionsort
* Shellsort
* Smoothsort
* Slowsort
* Stoogesort