Cod sursa(job #346052)

Utilizator sapiensCernov Vladimir sapiens Data 6 septembrie 2009 14:59:51
Problema Sortare prin comparare Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.04 kb
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.