Quicksort II

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

QuickSort.om
PROCEDURE QuickSort(VAR items: Items;
                    first, last: INTEGER);
   (* sort items[first..last] *)
   VAR
      pivot: Item;
      i, j: INTEGER;
BEGIN
   IF first < last THEN
      (* select pivot element *)
      pivot := items[first];
      (* divide ... *)
      i := first; j := last;
      REPEAT
         WHILE CompareItems(items[i], pivot) < 0 DO
            INC(i);
         END;
         WHILE CompareItems(items[j], pivot) > 0 DO
            DEC(j);
         END;
         IF i <= j THEN
            SwapItems(items[i], items[j]);
            INC(i); DEC(j);
         END;
      UNTIL i > j;
      (* ... and conquer *)
      QuickSort(items, first, j);
      QuickSort(items, i, last);
   END;
END QuickSort;

*Diese Variante lehnt sich an die Version von Niklaus Wirth, ``Algorithmen und Datenstrukturen'', Teubner-Verlag
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1999, 2004 Andreas F. Borchert, in HTML konvertiert am 28.01.2005