Cod sursa(job #895950)

Utilizator mada0222Tomus Madalina mada0222 Data 27 februarie 2013 13:12:13
Problema Sortare prin comparare Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.53 kb
program mergesort;
type vect=array[1..500000] of longint;
var f,g:text;
    n,i:longint;
    a:vect;
procedure merge(m,st,sf:longint);
var k,i,j:longint;
b:vect;
  begin
    i:=st;
    j:=m+1;
    k:=1;
      while (i<=m) and (j<=sf) do
        begin
           if a[i]<=a[j] then
             begin
             b[k]:=a[i];
             i:=i+1;
             end
             else
             begin
               b[k]:=a[j];
               j:=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
        else
          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);
  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.