# 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.