Professor, O método particiona não utiliza o parâmetro inicial, portanto a analise esta sempre iniciando a partir da primeira posição do array, independente de qual trecho do array esta sendo avaliado.
Algoritmo da aula:
private static int particiona(Nota[] notas, int inicial, int termino) {
int menoresEncontrados = 0;
Nota pivo = notas[termino - 1];
for(int analisando = 0; analisando < termino -1; analisando ++) {
Nota atual = notas[analisando];
if(atual.getValor() <= pivo.getValor()) {
troca(notas, analisando, menoresEncontrados);
menoresEncontrados++;
}
}
troca(notas, termino -1, menoresEncontrados);
return menoresEncontrados;
}
Creio que iterações desnecessárias podem ser eliminadas ao setarmos o valor inicial da variável analisando do loop para o valor recebido no parâmetro inicial. Faz sentido?