Shaker sort

Si tratta di un bubble sort nei due sensi.
Si tenta di ridurre la lunghezza delle passate partendo dai due lati alternativamente.

Procedure SHAKERSORT(Var V: Vettore; N: Integer);
Var
   Inizio, Fine, Ultimo, i: Integer;
Begin
   Inizio:=1;
   Fine:=N-1;
   Ultimo:=N-1;
   While(Inizio <= Fine) Do
      Begin
         For i:=Inizio To Fine Do
            If(V[i] > V[i+1]) then
               Begin
                  SCAMBIA(V[i], V[i+1]);
                  Ultimo:=i;
               End;
         Fine:=Ultimo-1;
         For i:=Fine DownTo Inizio do
            If(V[i] > V[i+1]) Then
               Begin
                  SCAMBIA(V[i], V[i+1]);
                  Ultimo:=i;
               End;
         Inizio:=Ultimo+1;
      End;
End;