|
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. |