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