Pagini recente » Cod sursa (job #534524) | Cod sursa (job #1386071) | Cod sursa (job #135602) | Cod sursa (job #1484607) | Cod sursa (job #694292)
Cod sursa(job #694292)
program merge_sort;
var f,g:text;
v,b:array[1..500000] of longint;
n,i:longint;
bufin,bufout:array [1..65000] of char;
procedure merge (st,dr,mijloc:longint);
var k,i,j:longint;
begin
i:=st; j:=mijloc+1; k:=0;
while (i<=mijloc) and (j<=dr) do
if v[i]<=v[j] then
begin
k:=k+1; b[k]:=v[i]; i:=i+1;
end
else
begin
k:=k+1; b[k]:=v[j]; j:=j+1;
end;
if i<=mijloc then
for j:=i to mijloc do
begin
k:=k+1; b[k]:=v[j];
end
else
for i:=j to dr do
begin
k:=k+1; b[k]:=v[i];
end;
k:=1;
for i:=st to dr do
begin
v[i]:=b[k]; k:=k+1;
end;
end;
procedure divide (st,dr:longint);
var aux,mijloc:longint;
begin
if dr-st<=1 then
begin
if v[st]>v[dr] then
begin
aux:=v[st]; v[st]:=v[dr]; v[dr]:=aux;
end;
end
else
begin
mijloc:=(st+dr) div 2;
divide (st,mijloc);
divide (mijloc+1,dr);
merge (st,dr,mijloc);
end;
end;
begin
assign (f,'algsort.in'); reset (F);
assign(g,'algsort.out'); rewrite (g);
settextbuf (f,bufin);
settextbuf (g,bufout);
readln (f,n);
for i:=1 to n do
read (f,v[i]);
divide (1,n);
for i:=1 to n do
write (g,v[i], ' ');
close (F);
close (g);
end.