2
respostas

[Dúvida] Aula 8: Método particiona

Reparei que na aula o método particiona possui uma atributo inicio, todavia esse atributo não é usado. Ele acabou me induzindo a crer da necessidade de controlar o loop for interno nele, de modo que a variável do loop seja o valor dele. Dessa forma fico recebendo StackOverflowError/estouro de pilha. O correto é mesmo sempre percorrer o array todo para localizar o elemento pivô, sem controlar o início e o fim da iteração?

2 respostas

Olá Daniel,

Sobre qual dos algorítmo você está falando?

Poderia passar a aula ou o exercício específico?

At.te

Oi Lucas! Obrigado pelo retorno! É referente à Aula 8 (algoritmo QuickSort). Nessa aula ele cria o método particiona, que é o método responsável por iterar o array, e dividi-lo de acordo com o pivô passado com valores menores que ele a esquerda, e maiores a direita, sem ordená-los.

A assinatura do método particiona foi escrita recebendo o array, um valor int inicia e outro valor int termina. Porém esse atributo inicia não é utilizado, onde "teoricamente" ele deveria ser colocado como valor que alimenta a variável int do loop for. Mas isso não foi feito. A variável do loop inicia sempre como 0 e o atributo inicia do método particiona não está sendo usado.

Por descuido meu, eu acabei atribuindo a variável do loop for para ser inicializado a partir do valor do atributo inicia, ao invés de inicializar sempre como 0, onde dessa forma temos loop infinito nas recursões, gerando StackOverflowError.

A minha dúvida é quanto a isso. O atributo inicia do método particiona é pra ser ignorado mesmo a ponto de poder removê-lo? Já que os trechos de array passados no método particiona sempre deverão iniciar do 0 e não de outro índice?