Pagini recente » Cod sursa (job #683418) | Cod sursa (job #1397927) | Cod sursa (job #409634) | Cod sursa (job #3153117) | Cod sursa (job #643049)
Cod sursa(job #643049)
program info;
type vector=array[1..50] of integer;
var a:vector;
f,g:text;
i,n:integer;
procedure citire();
begin
assign (f,'algsort.in');
reset (f);
readln (f,n);
for i=1 to n do read(f,a[i]);
close (f);
end;
procedure afisare();
begin
assign g (g,'algsort.out');
rewrite (g);
for i=1 to n do write (g,a[i],' ');
close (g);
end;
procedure merge(p,q,m:integer;var a:vector);
var i,j,k:integer;
b:vector;
begin
i:=p;
j:=m+1;
k:=1;
while (i<=m) and (j<=q) do begin
if a[i]<=a[j] then begin b[k]:=a[i];
i:=i+1;
k:=k+1;
end else begin b[k]:=a[j];
j:=j+1;
k:=k+1;
end;
end;
if i<=m then
for j:=1 to m do begin
b[k]:=a[j];
k:=k+1;
end;
if j<=q then
for i:=j to q do begin b[k]:=a[i];
k:=k+1;
end;
i:=1;
for i:=p to q do begin a[i]:=b[k];
k:=k+1;
end;end;
procedure divide(p,q:integer;var a:vector);
var m,aux:integer;
begin
if q-p<=1 then begin
if a[p]>=a[q] then begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end else begin
m:=p+q div 2;
divide(p,m,a);
divide(m+1,q,a);
merge(p,q,m,a);
end;
end; end;
begin write('n='); readln(n);
citire();
divide(1,n,a);
afisare();
readln;
end.