Ola, pessoal!
Ao implementar o método particiona e utilizá-lo na chamada da ordenação, senti a necessidade de iniciar o contador de menores menoresAteAgora com o valor da variável inicio como segue o código:
public static int particiona(Nota[] notas, int inicio, int termino) {
int menoresAteAgora = inicio;
int pivo = termino - 1;
for (int atual = inicio; atual < termino - 1; atual++) {
if (notas[atual].getValor() <= notas[pivo].getValor()) {
troca(notas, atual, menoresAteAgora);
menoresAteAgora++;
}
}
troca(notas, pivo, menoresAteAgora);
return menoresAteAgora;
}
Nos testes, quando utilizo a variável menoresAteAgora e o intervalo de índices não inicia com 0, o valor pode ser trocado de forma incorreta. Por exemplo:
// Exemplo de intervalo analisado
Nota[0] = 3,0
Nota[1] = 5,0
Nota[2] = 4,0
Quando analiso o intervalo (1,2) o contador não incrementa, pois 5,0 > 4,0, logo o método troca é chamado troca(notas, 1, 2). Se eu iniciar a variável sempre com 0 (zero) a troca será feita de forma incorreta. Abaixo seguem as notas utilizadas como entrada:
Nota[] notas = new Nota[] {
new Nota("Andre", 4),
new Nota("Mariana", 5),
new Nota("Carlos", 8.5),
new Nota("Paulo", 9),
new Nota("Jonas", 3),
new Nota("Juliana", 6.7),
new Nota("Ana", 10),
new Nota("Lucia", 9.3),
new Nota("Guilherme", 7)
};
é necessário mesmo essa correção ou deixei passar algo?