Procedure ShakerSort(var v:vetor;tam:integer);
var
   l,r,k,j,x : integer;
begin
   l := 2;
   r := tam;
   k := tam;
   repeat
      for j := r downto l do
      begin
         if v[j-1] > v[j] then
         begin
           x := v[j-1];
           v[j-1] := v[j];
           v[j] := x;
           k := j;
         end
      end;
      l := k+1;
      for j := l to r do
      begin
         if v[j-1] > v[j] then
         begin
           x := v[j-1];
           v[j-1] := v[j];
           v[j] := x;
           k := j;
         end
      end;
      r := k-1;
   until l > r;
end;