Si tratta di un bubble sort nei due sensi.
Si tenta di ridurre la lunghezza delle passate partendo dai due lati alternativamente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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; |