Cod sursa(job #643049)

Utilizator sternvladStern Vlad sternvlad Data 2 decembrie 2011 20:02:34
Problema Sortare prin comparare Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.15 kb
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.