Olá, estou com um dúvida em um dos cursos..
Curso de Algoritmos ll: MergeSort, QuickSort, Busca Binária e Análise de Algoritmo; Aula 07 (O quick Sort); Atividade 02 (Pivotando por completo);
O professor na atividade 02 ele faz algumas trocas, mas não ficou bem explicado onde serão as trocas.. Ao fazer o que ele pedia por escrito começou a me dar erros em duas posições: A primeira posição que está me dando erro é quando se faz a troca do elemento que está na posição analisando para a posição menoresEncontrados (ele não encontra a variável analisando em -> troca(notas, analisando, menoresEncontrados):
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.getNota() <= pivo.getNota()) {
troca(notas, analisando, menoresEncontrados);
menoresEncontrados++;
}
}
troca(notas, analisando, menoresEncontrados);
return menoresEncontrados;
}
E a segunda posição de erro é quando fala que vamos criar uma nova posição para imprimir a posição do pivô ele não encontra o quebraNoPivo:
int novaPosicao = quebraNoPivo(notas, 0, notas. length);
System.out.println("O pivo foi parar em " + novaPosicao);
for(int atual = 0; atual < notas.length; atual++) {
Nota nota = notas[atual];
System.out.println(nota.getAluno() + " " + nota.getNota());
}
}
Código fonte completo:
Classe Nota:
public class Nota {
private String aluno;
private double nota;
public Nota(String aluno, double nota) {
this.aluno = aluno;
this.nota = nota;
}
public String getAluno() {
return aluno;
}
public void setAluno(String aluno) {
this.aluno = aluno;
}
public double getNota() {
return nota;
}
public void setNota(double nota) {
this.nota = nota;
}
}
Classe TesteOrdenação:
public static void main(String[] args) {
Nota guilherme = new Nota("guilherme", 7);
Nota[] notas = {
new Nota("andre", 4),
new Nota("carlos", 8.5),
new Nota("ana", 10),
new Nota("jonas", 3),
new Nota("juliana", 6.7),
new Nota("lucia", 9.3),
new Nota("paulo", 9),
new Nota("mariana", 5),
guilherme
};
ordena(notas, 0, notas.length);
int novaPosicao = quebraNoPivo(notas, 0, notas. length);
System.out.println("O pivo foi parar em " + novaPosicao);
for(int atual = 0; atual < notas.length; atual++) {
Nota nota = notas[atual];
System.out.println(nota.getAluno() + " " + nota.getNota());
}
}
private static void ordena(Nota[] notas, int de, int ate) {
int elementos = ate - de;
if(elementos > 1){
int posicaoDoPivo = particiona(notas, de, ate);
ordena(notas, de, posicaoDoPivo);
ordena(notas, posicaoDoPivo + 1, ate);
}
}
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.getNota() <= pivo.getNota()) {
troca(notas, analisando, menoresEncontrados);
menoresEncontrados++;
}
}
troca(notas, analisando, menoresEncontrados);
return menoresEncontrados;
}
private static void troca(Nota[] notas, int de, int para) {
Nota nota1 = notas[de];
Nota nota2 = notas[para];
notas[para] = nota1;
notas[de] = nota2;
}
Dando um feedback geral para essa determinada aula..gosto muito dos cursos e aulas da Alura, mas essa em específica deixou a desejar..o professor poderia ter feito vídeos explicando essa parte de troca porque ficou confuso de entender ou então colocar o projeto que ele fez dentro do pacote do curso como outros professores deixam na maioria das vezes.