2
respostas

[Bug] TypeError: Cannot read properties of undefined (reading 'preco') QuickSort

Não estou conseguindo achar o erro acusado:

fiz console.log antes de entrar no while tenhos os resultados certinho, porém, quando entrar no while ele me da undefined.

const listaLivros = require("./array");
const trocaLugar = require("./encontraMenores");

function quickSort(array, esquerda, direita){

    if(array.length > 1){
        let indiceAtual = particiona(array, esquerda, direita);

        if(esquerda < indiceAtual-1){
            quickSort(array, esquerda, indiceAtual-1);
        }

        if(indiceAtual < direita){
            quickSort(array, indiceAtual-1, direita);
        }
    }

    return array;
}

function particiona(array, esquerda, direita){
    console.log(array);
    let pivo = array[Math.floor((esquerda + direita) / 2)]
    let atualEsquerda = esquerda; //0
    let atualDireita = direita; //10

    console.log(array[atualEsquerda].preco)
    console.log(array[atualDireita].preco)
    console.log(pivo.preco)

    while (atualEsquerda <= atualDireita){
        while(array[atualEsquerda].preco < pivo.preco){
            atualEsquerda++;
        }
        while(array[atualDireita].preco > pivo.preco){
            atualDireita--;
        }

        if(atualEsquerda <= atualDireita){
            trocaLugar(array, atualEsquerda, atualDireita);
            atualEsquerda++;
            atualDireita++;
        }
    }

    return atualEsquerda;
}

console.log(quickSort(listaLivros, 0, listaLivros.length-1))
erro log:
C:\Users\.....Documents\Alura\Back-End\JS\JS-ALGORITMOS-ORDENACAO_BUSCAS\aula03\quickSort.js:35
        while(array[atualDireita].preco > pivo.preco){
                                  ^

TypeError: Cannot read properties of undefined (reading 'preco')
    at particiona (C:\Users\.....\Documents\Alura\Back-End\JS\JS-ALGORITMOS-ORDENACAO_BUSCAS\aula03\quickSort.js:35:35)
    at quickSort (C:\Users\....\Documents\Alura\Back-End\JS\JS-ALGORITMOS-ORDENACAO_BUSCAS\aula03\quickSort.js:7:27)
    at Object.<anonymous> (C:\Users\.....\Documents\Alura\Back-End\JS\JS-ALGORITMOS-ORDENACAO_BUSCAS\aula03\quickSort.js:49:13)
    at Module._compile (node:internal/modules/cjs/loader:1254:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
    at Module.load (node:internal/modules/cjs/loader:1117:32)
    at Module._load (node:internal/modules/cjs/loader:958:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:23:47
2 respostas

Resolvido.

if(atualEsquerda <= atualDireita){
            trocaLugar(array, atualEsquerda, atualDireita);
            atualEsquerda++;
            atualDireita++; //CERTO SERIA atualDireita--; por isso está bugando.
        }
    }

Olá Heliel, tudo bem?

Agradeço por compartilhar a resolução deste problema aqui no fórum, imagino que assim você ajudará outros alunos que enfrentarem o mesmo problema que você. Continue assim, sei que está em um bom caminho para se tornar um ótimo profissional.

Caso durante os seus estudos você tenha problemas ou dúvidas, recorra ao fórum, estamos aqui para ajudá-lo.

Abraços e bons estudos!