CocktailSort (take 2)

Vamos agora aplicar ao CocktailSort a mesma otimização que o BubbleSort2 faz no BubbleSort. Devemos lembrar que os limites da parte do array que não está ordenada ainda e percorrer ela alternativamente da esquerda para a direita e da diretia para a esquerda:

beg=0; end=len-2
do
  For all Pour i in [beg,end], do:
      If cells i and i+1 must be swapped, do it    
  end -= 1 (this means end = end - 1)
  For all Pour i in [beg,end] (downwards), do:
      If cells i and i+1 must be swapped, do it    
  beg += 1 (this means beg = beg + 1)
while at least one of the traversal swapped an element