{ Heap.Inc } { Sortierverfahren: Heap-Sort } { Uebergabeparameter: } { Class (das Array vom Typ StudentArray) } { ClassSize (Letzte Datensatznummer) } { Vordefiniert muss sein: } { StudentArray (TYPE StudentArray= Array Of ...)} { Student (Datentyp) } { Aufruf: } { HeapSort (DatenArray, letzter Datensatz) } Procedure HeapSort (Var Class: StudentArray; ClassSize: Integer); Procedure Switch (var Stu1, Stu2: Integer); { Vertauscht Inhalt von zwei Variablen } Var TempStu: Student; { Austauschvariable } Begin { Switch } TempStu:=Stu1; Stu1:=Stu2; Stu2:=TempStu; End; { Switch } Procedure filter_down (max_ebene: Integer); Var i, { Schleifenvariable } Child : Integer; ready : Boolean; Begin { filter_down } i:=1; ready:=false; While (Not ready) Do Begin Child:=2 * i; If (Child > max_ebene) Then ready:=True Else Begin If (Child+1 <= max_ebene) then If (Class[Child+1] > class[Child]) Then Child:=Child+1; If (Class[i] < Class[Child]) Then Begin Switch(Class[i], Class[Child]); i:=Child; End Else ready:=True; End; End; End; { filter_down } Procedure filter_up (max_ebene: Integer); Var i, { Schleifenvariable } parents: Integer; Begin { filter_up } i:=max_ebene; While (i <> 1) Do Begin parents:=i Div 2; If (Class[i] > Class[parents]) Then Begin Switch(class[parents], Class[i]); i:=parents; End Else i:=1; End; End; { filter_up } Var i: Integer; { Schleifenvariable } Begin { Heap_Sort } For i:=2 TO ClassSize Do filter_up(i); For i:=ClassSize DownTo 2 Do Begin Switch (Class[1], Class[i]); filter_down (i-1); End; End; { Heap_Sort } { Ende Heap.Inc }