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;