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