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


Bild:insert.jpg


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);
}


Weblink