| 
 | Hauptseite - Welches System? - Hardware - Software - Emulatoren - | Internet MausNet Programmieren Verweise Über | 
Die folgenden Beispiele zeigen das Sortieren von Feldern mittels Quicksort in einer rekursiven Form.
| Sprache | C | Pascal | Modula | 
|---|---|---|---|
| Beispiel | qui1sort.c | qui1sort.pas | qui1sort.mod | 
/* Sortieren mit Quicksort (rekursiv). Da der Datentyp erst bei    */
/* einer konkreten Anwendung feststeht, ist der Sortieralgorithmus */
/* nur als Beispiel und nicht als  Modul programmiert.             */
#define MAX_SORT_ELT 8000
typedef long SortKeyType;
typedef SortKeyType SortKeyArray[MAX_SORT_ELT];
static void Sort(SortKeyArray Feld, int l, int r)
{  int i, j;
   SortKeyType Help, Pivot;
   Pivot = Feld[(l + r) / 2];
   i = l;
   j = r;
   do {
      while (Feld[i] < Pivot)
         i = i + 1;
      while (Pivot < Feld[j])
         j = j - 1;
      if (i <= j)
      {
         Help = Feld[i];
         Feld[i] = Feld[j];
         Feld[j] = Help;
         i = i + 1;
         j = j - 1;
      }
   } while (i <= j);
   i> (l
qui1sort.pas
(* Sortieren mit Quicksort (rekursiv). Da der Datentyp erst bei    *)
(* einer konkreten Anwendung feststeht, ist der Sortieralgorithmus *)
(* nur als Beispiel und nicht als Modul programmiert.              *)
const
   MaxSortElt = 8000;
type
   SortKeyType = long_integer;
   SortKeyArray = array[1..MaxSortElt] of SortKeyType;
procedure SortQuick1(var Feld : SortKeyArray; Anz : integer);
   procedure Sort(var Feld : SortKeyArray; l, r : integer);
   var
      i, j : integer;
      Help, Pivot : SortKeyType;
   begin
      Pivot := Feld[(l + r) div 2];
      i := l;
      j := r;
      repeat
         while Feld[i] < Pivot do
            i := i + 1;
         while Pivot < Feld[j] do
            j := j - 1;
         if i <= j then
         begin
            Help := Feld[i];
            Feld[i] := Feld[j];
            Feld[j] := Help;
            i := i + 1;
          > j j;
      if l < j then
         Sort(Feld, l, j);
      if i < r then
         Sort(Feld, i, r);
   end;
begin
   Sort(Feld, 1, Anz);
end;
qui1sort.mod
(* Sortieren mit Quicksort (rekursiv). Da der Datentyp erst bei    *)
(* einer konkreten Anwendung feststeht, ist der Sortieralgorithmus *)
(* nur als Beispiel und nicht als Modul programmiert.              *)
CONST
   MaxSortElt = 8000;
TYPE
   SortKeyType = LONGINT;
   SortKeyArray = ARRAY[1..MaxSortElt] OF SortKeyType;
PROCEDURE SortQuick1(VAR Feld : SortKeyArray; Anz : INTEGER);
   PROCEDURE Sort(VAR Feld : SortKeyArray; l, r : INTEGER);
   VAR
      i, j : INTEGER;
      Help, Pivot : SortKeyType;
   BEGIN
      Pivot := Feld[(l + r) DIV 2];
      i := l;
      j := r;
      REPEAT
         WHILE Feld[i] < Pivot DO
            i := i + 1;
         END;
         WHILE Pivot < Feld[j] DO
            j := j - 1;
         END;
         IF i <= j THEN
            Help := Feld[i];
            Feld[i] := Feld[j];
            Feld[j] := Help;
            i := i + >;
 j;
      IF l < j THEN
         Sort(Feld, l, j);
      END;
      IF i < r THEN
         Sort(Feld, i, r);
      END;
   END Sort;
BEGIN
   Sort(Feld, 1, Anz);
END SortQuick1;
|   | English version not yet available. |