Cod sursa(job #702830)

Utilizator andrei_toaderToader Andrei Sorin andrei_toader Data 2 martie 2012 09:33:13
Problema Sortare prin comparare Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.16 kb
program merge_sort;
var f,g:text;
    n,i:longint;
    v,b:array[1..500000] of longint;

procedure interclasare (st,dr,mijloc:longint);
var i,j,k:longint;
begin
 k:=0;
 i:=st; j:=mijloc+1;
 while (i<=mijloc) and (j<=dr) do
 begin
  if v[i]<v[j] then
  begin
   k:=k+1; b[k]:=v[i]; i:=i+1;
  end
  else
  begin
  k:=k+1; b[k]:=v[j]; j:=j+1;
  end;
 end;
 if i<=mijloc then
 begin
  for j:=i to mijloc do
  begin
   k:=k+1; b[k]:=v[j];
  end;
 end
 else
 begin
  for i:=j to dr do
  begin
   k:=k+1;
   b[k]:=v[i];
  end;
 end;
 k:=0;
 for i:=st to dr do
 begin
 k:=k+1; v[i]:=b[k];
 end;
end;

procedure sortare (st,dr:longint);
var aux,mijloc:longint;
begin
 if dr-st<=1 then
 begin
  if v[st]>v[dr] then
  begin
   aux:=v[st]; v[st]:=v[dr]; v[dr]:=aux;
  end;
 end
 else
 begin
  mijloc:=(st+dr) div 2;
  sortare (st,mijloc);
  sortare (mijloc+1,dr);
  interclasare (st,dr,mijloc);
 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,v[i]);
 sortare (1,n);
 for i:=1 to n do
  write (g,v[i],' ' );
 close (F); close (g);
end.