Cod sursa(job #308933)

Utilizator belgun_adrianBelgun Dimitri Adrian belgun_adrian Data 28 aprilie 2009 23:15:57
Problema Sortare prin comparare Scor 20
Compilator fpc Status done
Runda Arhiva educationala Marime 1.04 kb
// Arhiva educationala - Sortare prin comparare
// Implementare LSD Radix Sort pe 2 biti
// Timp constant n*64


var
        n, i, key,k, n2 : longint;
        v1, v2          : array[1..500000] of longint;
        f               : text;

begin
assign  (f, 'algsort.in');
reset   (f);
readln  (f, n);
for i := 1 to n do read (f,v1[i]);
close   (f);

for k := 0 to 15 do
   begin
   if (k mod 2 = 1) then continue;   
   if (k mod 4 = 0) then
    begin
    n2 := 0;
    for key := 0 to 3 do
        for i := 1 to n do
            if (((v1[i] shr k) mod 4) = key) then
               begin
               inc(n2);
               v2[n2]:=v1[i];
               end;
    end
   else
    begin
    n2 := 0;
    for key := 0 to 3 do
        for i := 1 to n do
            if (((v2[i] shr k) mod 4) = key) then
               begin
               inc(n2);
               v1[n2]:=v2[i];
               end;
    end;
	end;

assign  (f,'algsort.out');
rewrite (f);

for i:=1 to n do write (f,v1[i],' ');
close   (f);
end.