Cod sursa(job #895956)

Utilizator mada0222Tomus Madalina mada0222 Data 27 februarie 2013 13:13:00
Problema Sortare prin comparare Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.46 kb
program gfhgdfh;
var f,g:text;
n,i:longint;
a,b:array[0..600001] of longint;
bufin,bufout:array[1..65000] of byte;
Procedure merge(m,st,sf:longint);
var i,j,k:longint;
begin
   i:=st;
   j:=m+1;
   k:=1;
 while (i<=m) and (j<=sf) do
    begin
      if a[i]<=a[j] then
         begin
         i:=i+1;
         b[k]:=a[i-1];
         end
         else
           begin
           j:=j+1;
           b[k]:=a[j-1];
           end;
      k:=k+1;
    end;
    if (i<=m) then
        begin
          for j:=i to m do
             begin
             b[k]:=a[j];
             k:=k+1;
             end;
        end;
     If (j<=sf) then
        begin
        for i:=j to sf do
           begin
           b[k]:=a[i];
           k:=k+1;
           end;
        end;
        k:=1;
    for i:=st to sf do
    begin
      a[i]:=b[k]; k:=k+1;
    end;

end;
procedure sort(st,sf:longint);
var aux,m:longint;
begin
  if (sf-st)<=1 then
    begin
        if a[st]>=a[sf] then begin
        aux:=a[st]; a[st]:=a[sf]; a[sf]:=aux;
        end;
    end
    else
       begin
       m:=(st+sf) div 2;
       sort(st,m);
       sort(m+1,sf);
       merge(m,st,sf);
       end;
end;
begin
assign(f,'algsort.in'); reset(f);
assign(g,'algsort.out'); rewrite(g);
settextbuf(f,bufin);
settextbuf(f,bufout);
readln(f,n);
   for i:=1 to n do
      read(f,a[i]);
   sort(1,n);
   for i:=1 to n do
     write(g,a[i],' ');
close(f);
close(g);
end.