BubbleSort (take 3)

Vamos agora reintroduzir a pequena otimização que fizemos no passo anterior: se uma passagem não troca nenhum elemento, significa que a array já está ordenada. Neste caso, vamos parar todo o processo de ordenação.

[!java|python|c]Para isto, simplesmente use a palavra-chave break, que interrompe o loop atual. Cuidado, se você tem vários loops aninhados, isto só vai ter efeito no mais interno.[/!] [!scala]Para isto, simplesmente saia da função atual chamando return sem nenhum valor associado.[/!]

para todo i em [len-2,0] (percorrendo do maior para o menor)
       Para todo j em [0, i]
          Se células j e j+1 devem ser trocadas, troque
       Se ao percorrer j não fez nenhuma troca, pare o loop

Esta otimização é ainda mais desapontadora: ela só dá um ganho de alguns porcento sobre o BubbleSort2 no total de leituras.