A ordenação de Mona

Mona criou um método para ordenar um array em ordem crescente.

Começando pela esquerda do array, ela compara os números aos pares. Se o primeiro par estiver ordenado [número menor, número maior], ela passa para o próximo. Se o primeiro par estiver ordenado [número maior, número menor], ela troca os dois inteiros de posição antes de passar para o próximo par. Ela repete esse processo até chegar ao fim do array.

Depois, ela volta ao início do array e repete esse processo até que todo o array esteja ordenado.

Se o array desordenado for [3, 9, 7, 4], ela realizará os seguintes passos (observe que Trocas se refere aqui ao total acumulado de trocas):

  1. Ela começa com o primeiro par.
  2. [3, 9] está em ordem; prossiga. Array: [3, 9, 7, 4]. Trocas: 0.
  3. [9, 7] não está em ordem. Troque. Array: [3, 7, 9, 4]. Trocas: 1
  4. [9, 4] não está em ordem. Troque. Array: [3, 7, 4, 9]. Trocas: 2
  5. Verifique se o array está ordenado. Ele não está, então recomece pelo primeiro par.
  6. [3, 7] está em ordem; prossiga. Array: [3, 7, 4, 9]. Trocas: 2
  7. [7, 4] não está em ordem. Troque. Array: [3, 4, 7, 9]. Trocas: 3.
  8. [7, 9] está em ordem; prossiga. Array: [3, 4, 7, 9]. Trocas: 3.
  9. Verifique se o array está ordenado. Está. Fim.

Ordenar o array [3, 9, 7, 4] exige 3 trocas. Escreva uma função que receba um array desordenado e retorne o número de trocas necessárias para ordená-lo de acordo com o algoritmo de Mona.

Exemplos

Program.numberOfSwaps(new int[]{5, 4, 3}) ➞ 3

Program.numberOfSwaps(new int[]{1, 3, 4, 5}) ➞ 0

Program.numberOfSwaps(new int[]{5, 4, 3, 2}) ➞ 6

Notas

N/A