{ Shell.Inc } { Sortierverfahren: Shell-Sort } { Uebergabeparameter: } { Class (das Array vom Typ StudentArray) } { ClassSize (Letzte Datensatznummer) } { Vordefiniert muss sein: } { StudentArray (TYPE StudentArray= Array Of ...)} { Student (Datentyp) } { Aufruf: } { ShellSort (DatenArray, letzter Datensatz) } Procedure ShellSort (Var Class: StudentArray; ClassSize: Integer); Var Offset, { Vergleichsoffset } Tausch, { Wo war letzer Tausch ? } Limit, { Anzahl zu vergleichender Elemente } Line: Integer; { Aktuelle Line } Procedure Switch (Var Stu1, Stu2: Student); Var TempStu: Student; Begin { Switch } TempStu:=Stu1; Stu1:=Stu2; Stu2:=TempStu; end; { Switch } Begin { ShellSort } Offset:=ClassSize Div 2; { Vergleichsoffset auf die Haelfte der Satz- zahl setzen } While (Offset > 0) Do Begin { Schleife, bis Offset = 0 } Limit:=ClassSize-Offset; Repeat Tausch:=0; { Nicht tauschen bei diesem Offset } For Line:=1 To Limit Do If (Class[Line] > Class[Line+Offset]) Then Begin { austauschen } Switch (Class[Line],Class[Line+Offset]); Tausch:=Line; End; { austauschen } { Sortierung nur bis dahin, wo letzer Tausch war } Limit:=Tausch-Offset; Until (Tausch=0); { Beim letzen Offset kein Tausch. Versuch mit halbiertem Offset } Offset:=Offset Div 2; End; End; { ShellSort } { Ende Shell.Inc }