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;