|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Die folgenden Beispiele zeigen das Sortieren von Feldern mittels Shellsort.
Sprache | C | Pascal | Modula |
---|---|---|---|
Beispiel | shelsort.c | shelsort.pas | shelsort.mod |
/* Sortieren mit Shellsort und den Schrittweiten k0=max div 2; */ /* kn+1=kn div 2. Da der Datentyp erst bei einer konkreten An- */ /* wendung feststeht, ist der Sortieralgorithmus nur als Bei- */ /* spiel und nicht als Modul programmiert. */ #define MAX_SORT_ELT 8000 typedef long SortKeyType; typedef SortKeyType SortKeyArray[MAX_SORT_ELT]; void SortShellsort(SortKeyArray Feld, int Anz) { int i, j, k; SortKeyType Help; k = Anz/2; while (k > 0) { for (i=k; i=0) && (Feld[j]>Feld[j+k])) { Help = Feld[j]; Feld[j] = Feld[j+k]; Feld[j+k] = Help; j = j-k; } } k = k/2; } }
(* Sortieren mit Shellsort und den Schrittweiten k0=max div 2; *) (* kn+1=kn div 2. Da der Datentyp erst bei einer konkreten An- *) (* wendung feststeht, ist der Sortieralgorithmus nur als Bei- *) (* spiel und nicht als Modul programmiert. *) const MaxSortElt = 8000; type SortKeyType = long_integer; SortKeyArray = array[1..MaxSortElt] of SortKeyType; procedure SortShellsort(var Feld:SortKeyArray; Anz:integer); var i, j, k : integer; Help : SortKeyType; Test : boolean; begin k := Anz div 2; while k>0 do begin for i:=k to Anz do begin j := i-k; Test := false; repeat if (j<1) then begin Test := true; end else begin if (Feld[j]<=Feld[j+k]) then begin Test := true; end else > be
shelsort.mod
(* Sortieren mit Shellsort und den Schrittweiten k0=max div 2; *) (* kn+1=kn div 2. Da der Datentyp erst bei einer konkreten An- *) (* wendung feststeht, ist der Sortieralgorithmus nur als Bei- *) (* spiel und nicht als Modul programmiert. *) CONST MaxSortElt = 8000; TYPE SortKeyType = LONGINT; SortKeyArray = ARRAY[1..MaxSortElt] OF SortKeyType; PROCEDURE SortShellsort(VAR Feld:SortKeyArray; Anz:CARDINAL); var i, j, k : INTEGER; Help : SortKeyType; Test : BOOLEAN; BEGIN k := Anz DIV 2; WHILE k>0 DO FOR i:=k TO Anz DO j := i-k; Test := FALSE; REPEAT IF (j<1) THEN Test := TRUE; ELSE IF (Feld[j] <= Feld[j+k]) THEN Test := TRUE; ELSE Help := Feld[j]; Feld[j] := Feld[j+k]; Feld[j+k] >= H
![]() |
English version not yet available. |