Quick-Sort
aus www.iwiki.de, der freien Wissensdatenbank
Quick-Sort ist eines der schnellsten und zugleich einfachsten SortierÂverfahren, es arbeitet rekursiv nach dem Teile-und-Herrsche-Prinzip.
Inhaltsverzeichnis |
Prinzip
Die Folge der zu sortierenden Daten wird in zwei Bereiche getrennt. Dies erfolgt durch Auswahl des mittleren Elements (Pivotelement p) durch ganzzahlige Division der ListenlÀnge. Ein Bereich befindet sich rechts (R) vom mittleren Element, der andere links (L).
L soll nur Elemente enthalten, die < p sind. R soll nur Elemente enthalten, die >= p sind.
ZÀhler i durchlÀuft L von links nach rechts, bis er einen Wert findet, der > p ist. ZÀhler j durchlÀuft R von rechts nach links, bis er eine Wert findet, der < p ist.
Sind beide Werte gefunden, werden diese miteinander vertauscht. Die beiden ZĂ€hler laufen solange, bis sie beim Mittelwert angelangt sind. AnschlieĂend wird in L und R das mittlere Element bestimmt. Die Teilfolgen werden ihrerseits in zwei Bereiche unterteilt. Die ZĂ€hler werden gestartet.
Das Aufsplittern der Bereiche und Vertauschen der Elemente wird solange ausgefĂŒhrt, bis die Elementfolge sortiert ist.
(das Pivotelement muss sich nicht unbedingt in der Mitte der zu sortierenden Elementenfolge befinden)
Beispiel
Implementierung
Quicksort (int data[],int left,int right) {
int mid,tmp,i,j;
i = left;
j = right;
mid = data[(left + right)/2];
do {
while(data[i] < mid)
i++;
while(mid < data[j])
j--;
if (i <= j) {
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
i++;
j--;
}
} while (i <= j);
if (left < j) Quicksort(data,left,j);
if (i < right) Quicksort(data,i,right);
}

