const SIZE = 20000; type TFeld = array[1..SIZE] of integer; procedure heapsort(var f:TFeld); procedure erzeugeheap(var f:TFeld); // Aufbau des Heaps var i,j,max,temp:integer; begin for i := SIZE div 2 downto 2 do // Die zweite Hälfte des Feldes braucht nicht betrachtet werden. begin j:=i; while j <= SIZE div 2 do begin max := j * 2 + 1; // Finde das Maximum der (beiden) Söhne. if max > SIZE then dec(max) else if f[max-1] > f[max] then dec(max); if f[j] < f[max] then // Tausche gegebenenfalls.
begin temp := f[j]; f[j] := f[max]; f[max] := temp; end; j := max; end; end; end; function popmax(var f:TFeld;heapsize:integer):integer; var i,max,temp:integer; begin popmax := f[1]; f[1] := f[heapsize]; i := 1; while i <= (heapsize div 2) do // Setze das letzte Element an Anfang setzen und lasse es versickern.
begin max := i * 2 + 1; // Finde das Maximum der (beiden) Söhne. if max > heapsize then dec(max) else if f[max-1] > f[max] then dec(max); if f[i] < f[max] then // Tausche gegebenenfalls.
begin temp := f[i]; f[i] := f[max]; f[max] := temp; end; i := max; end; end; var i:integer; begin genheap(f); for i:=SIZE downto 1 do f[i] := popmax(f,i); end; Quelle: http://de.wikibooks.org/wiki/Algorithmensammlung:_Sortierverfahren:_Heapsort