Pagini recente » Istoria paginii utilizator/lilpmario | Istoria paginii utilizator/denisagoia | Diferente pentru rotatie-lexicografic-minima intre reviziile 13 si 14 | Istoria paginii utilizator/1967 | Cod sursa (job #346052)
Cod sursa(job #346052)
Program algsort;
var f,g:text; a,b:array[1..500000]of longint;
i,n:longint;
procedure merge (l1,l2,r2:longint);
var x,y,z:longint;
begin
x:=l1; y:=l2; z:=0;
while (x<=l2-1) and (y<=r2) do begin
inc (z);
if a[x]<=a[y] then begin
b[z]:=a[x];
inc (x);
end else begin
b[z]:=a[y];
inc (y);
end;
end;
if x>l2-1 then while (y<=r2) do begin
inc (z);
b[z]:=a[y];
inc (y);
end else while (x<=l2-1) do begin
inc (z);
b[z]:=a[x];
inc (x);
end;
for z:=1 to r2-l1+1 do a[l1+z-1]:=b[z];
end;
procedure merge_sort (x,y:longint);
var z:longint;
begin
z:=(x+y) div 2;
if y-x>1 then begin
merge_sort (x,z);
merge_sort (z+1,y);
end;
merge (x,z+1,y);
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,a[i]);
merge_sort (1,n);
for i:=1 to n do write (g,a[i],' '); writeln (g);
close (f); close (g);
end.