Si tratta di un bubble sort nei due sensi.
def shaker_sort(lista):
n=len(lista)
inizio = 0
fine = n-1
ultimo = n-1
while(inizio < fine):
for i in range(inizio, fine): # PASSATA
if(lista[i] > lista[i+1]):
temp = lista[i]
lista[i] = lista[i+1]
lista[i+1] = temp
ultimo=i
fine=ultimo
for i in range(fine, inizio-1, -1): # PASSATA
if(lista[i] > lista[i+1]):
temp = lista[i]
lista[i] = lista[i+1]
lista[i+1] = temp
ultimo=i
inizio=ultimo