Procedure ShellSort(var v:vetor;tam:integer);
var
   h: array [1..4] of integer;
   g,s,z,e,i,j: integer;
   d : integer;
begin
   h[1]:=9;
   h[2]:=5;
   h[3]:=3;
   h[4]:=1;
   for s:=1 to 4 do
   begin
      z:= h[s];
      for e:=1 to z do
      begin
         i:= e+z;
         while i <= tam do
         begin
            g:= v[i];
            j:= i-z;
            while ( g < v[j] ) and (j > z-e) do
            begin
               v[j+z]:=v[j];
               j:=j-z;
            end;
            v[j+z]:=g;
            i:=i+z;
         end;
      end;
   end;
end;