Pagini recente » Cod sursa (job #1049401) | Cod sursa (job #1395812) | Cod sursa (job #1593717) | Cod sursa (job #893392) | Cod sursa (job #702830)
Cod sursa(job #702830)
program merge_sort;
var f,g:text;
n,i:longint;
v,b:array[1..500000] of longint;
procedure interclasare (st,dr,mijloc:longint);
var i,j,k:longint;
begin
k:=0;
i:=st; j:=mijloc+1;
while (i<=mijloc) and (j<=dr) do
begin
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;
end;
if i<=mijloc then
begin
for j:=i to mijloc do
begin
k:=k+1; b[k]:=v[j];
end;
end
else
begin
for i:=j to dr do
begin
k:=k+1;
b[k]:=v[i];
end;
end;
k:=0;
for i:=st to dr do
begin
k:=k+1; v[i]:=b[k];
end;
end;
procedure sortare (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;
sortare (st,mijloc);
sortare (mijloc+1,dr);
interclasare (st,dr,mijloc);
end;
end;
begin
assign (F,'algsort.in'); reset (f);
assign (g,'algsort.out'); rewrite (g);
readln (f,n);
for i:=1 to n do
read (f,v[i]);
sortare (1,n);
for i:=1 to n do
write (g,v[i],' ' );
close (F); close (g);
end.