0
respostas

Quicksort - pivotando por completo.

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.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software