Pagini recente » Cod sursa (job #750293) | Cod sursa (job #180543) | Cod sursa (job #1969064) | Cod sursa (job #1625744) | Cod sursa (job #1135868)
program heap;
const MAX_HEAP_SIZE = 500005;
var H : array [1..MAX_HEAP_SIZE] of longint;
i,n : longint;
procedure swap(var x,y : longint);
var aux : longint;
begin
aux:=x;
x:=y;
y:=aux;
end;
procedure coboara( n, k : longint);
var fiu : longint;
begin
repeat
fiu:=0;
if k*2<n then begin
fiu:=k*2;
if H[k*2+1]>H[k*2] then fiu:=k*2+1;
if H[fiu]<=H[k] then fiu:=0
end
else
if k*2=n then begin
fiu:=k*2;
if H[fiu]<=H[k] then fiu:=0;
end;
if fiu<>0 then begin
swap(H[k],H[fiu]);
k:=fiu;
end;
until fiu=0;
end;
procedure heapsort(n : longint);
var i :longint; begin
for i:=n downto 2 do begin
swap(H[1],H[i]);
coboara(i-1,1);
end;
end;
begin
assign(input,'algsort.in'); reset(input);
assign(output,'algsort.out'); rewrite(output);
readln(n);
for i:=1 to n do read(H[i]);
for i:=n div 2 downto 1 do coboara(n,i);
heapsort(n);
for i:=1 to n do write(H[i],' ');
close(input);
close(output);
end.