program piramida; {$APPTYPE CONSOLE} uses SysUtils; type aint=array [1..10000000] of integer; var today : TDateTime; var Arr:aint; n,i:integer; procedure change(var a, b:integer); var tmp:integer; begin tmp:=a; a:=b; b:=tmp; end; procedure rebuild(var A2:aint; f,d:word); var MaxSon:word; begin MaxSon:=f; if (2*f<=d)and(A2[Maxson]f then begin change(A2[f],A2[MaxSon]); rebuild(A2,MaxSon,d); end; end; procedure build (var A3:aint; n3:word); var j:word; begin for j:=n3 div 2 downto 1 do rebuild(a3,j,n3); end; procedure heapsort(var A1:aint; n1:word); var j:word; begin build(a1,n1); for j:=n1 downto 2 do begin change(A1[1],A1[j]); rebuild(A1,1,j-1); end end; procedure RndArrInput(var A4:aint; n4:word); var i:word; begin Randomize; for i:=1 to n4 do a4[i]:=random(100)-200; end; Procedure ArrOutput(var A5:aint; n5:word); var i:word; begin for i:=1 to n5 do write(a5[i],' '); end; begin today := Time; writeln('n='); readln(n); randomize; for i:=1 to n do arr[i]:=1000-random(2000); //for i:=1 to n do write(arr[i],' '); writeln; writeln('Time 1 = '+TimeToStr(today)); heapsort(arr,n); // for i:=1 to n do write(arr[i],' '); writeln('Time 2 = '+TimeToStr(today)); readln; end.