Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

Beispiel: Shellsort

Die folgenden Beispiele zeigen das Sortieren von Feldern mittels Shellsort.

Sprache C Pascal Modula
Beispiel shelsort.c shelsort.pas shelsort.mod


shelsort.c

/* 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;
   }
}

shelsort.pas

(* 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




Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum