Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Erro ao inserir no terminal

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, direita);
      }
    }
    return array;
}

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

    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));

Insira aqui a descrição dessa imagem para ajudar na acessibilidade ``

2 respostas
solução!

Olá, Felype! Tudo bem?

Pelo erro apresentado na imagem, parece que você está tentando acessar a propriedade preco de um elemento que é undefined. Isso geralmente ocorre quando tentamos acessar uma posição do array que não existe. No seu caso, o erro é apontado na linha onde o código tenta comparar array[atualDireita].preco > pivo.preco.

Uma causa comum para esse tipo de erro no contexto do quicksort é quando o índice direita que você passa para a função quickSort está fora dos limites do array. No seu código, você chama quickSort(listaLivros, 0, listaLivros.length), mas os índices de um array em JavaScript vão de 0 a length - 1. Portanto, você deve passar listaLivros.length - 1 como o terceiro argumento para evitar acessar uma posição indefinida.

Altere a chamada da função quickSort da seguinte maneira:

console.log(quickSort(listaLivros, 0, listaLivros.length - 1));

Isso deve corrigir o erro de tentar ler a propriedade preco de undefined, pois agora você não estará mais passando um índice que está fora dos limites do array.

Se ainda assim encontrar dificuldades, verifique se todos os elementos do array listaLivros possuem a propriedade preco e se não há nenhum outro lugar no código onde possa estar ocorrendo um acesso a uma posição indefinida do array.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Grato Armano! Pelas duas respostas!!!