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 tem vários
loops aninhados, isto só vai ter efeito no mais interno.[/!] [!scala]Para
isto, simplesmente saia da função atual a chamar return sem
nenhum valor associado.[/!] 
para todo i em [len-2,0] (a percorrer do maior ao 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.