Cod sursa(job #309414)

Utilizator belgun_adrianBelgun Dimitri Adrian belgun_adrian Data 30 aprilie 2009 11:00:35
Problema Sortare prin comparare Scor 20
Compilator fpc Status done
Runda Arhiva educationala Marime 1.12 kb
// Arhiva educationala - Sortare prin comparare
// Implementare LSD Radix Sort pe 2 biti
// Timp constant n*8


var
        n, i, key, k	: longint;
        v 				: array[1..500000] of longint;
		vKey			: array[0..15] of array [0..500000] of longint;
        f               : text;

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

for k := 0 to 8 do
    begin
    vKey[0][0]  := 0; vKey[1][0]  := 0; vKey[2][0] := 0; vKey[3][0]  := 0;
    vKey[4][0]  := 0; vKey[5][0]  := 0; vKey[6][0] := 0; vKey[7][0]  := 0;
    vKey[8][0]  := 0; vKey[9][0]  := 0; vKey[10][0]:= 0; vKey[11][0] := 0;
    vKey[12][0] := 0; vKey[13][0] := 0; vKey[14][0]:= 0; vKey[15][0] := 0;

	for i := 1 to n do
        begin
        key := (v[i] shr (4 * k)) and 15;
		inc(vKey[key][0]);
        vKey[key][vKey[key][0]]:=v[i];
        end;

	n := 0;
	for key := 0 to 15 do
		for i := 1 to vKey[key][0] do
			begin
			inc (n);
			v[n] := vkey[key][i];
			end;

	end;

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

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