2
respostas

[Dúvida] No console aparece mais de 1 array

Olá!

Estou com uma dúvida após finalizar a aula 3 (quickSort). O código, funciounou, porém, no console está com informações além do console da Ju, e eu não consegui identificar o motivo. Segue o que aparece no console:

> node quickSort.js
[
  { titulo: 'PHP', preco: 15 },
  { titulo: 'Python', preco: 20 },
  { titulo: 'Rust', preco: 22 },
  { titulo: 'Go', preco: 45 },
  { titulo: 'Elixir', preco: 50 },
  { titulo: 'Java', preco: 30 },
  { titulo: 'Scala', preco: 40 },
  { titulo: 'Ruby', preco: 28 },
  { titulo: 'JavaScript', preco: 25 },
  { titulo: 'C#', preco: 33 },
  { titulo: 'C++', preco: 35 }
]
[
  { titulo: 'PHP', preco: 15 },
  { titulo: 'Python', preco: 20 },
  { titulo: 'Rust', preco: 22 },
  { titulo: 'JavaScript', preco: 25 },
  { titulo: 'Ruby', preco: 28 },
  { titulo: 'Java', preco: 30 },
  { titulo: 'C++', preco: 35 },
  { titulo: 'Scala', preco: 40 },
  { titulo: 'C#', preco: 33 },
  { titulo: 'Go', preco: 45 },
  { titulo: 'Elixir', preco: 50 }
]

Segue o código completo:

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 - 1))
2 respostas

Ola Jonathan, comigo aconteceu a mesma coisa, e o que resolveu este "problema" foi ir ate o arquivo encontraMenores.js e comentar a linha de codigo no final do arquivo referente ao console.log que estava sendo feito neste arquivo.

Acredito que se comparar a saida da execuçao do arquivo encontraMenores.js, ira notar que é o primeiro array de objetos que aparece no terminal.

Olá Elieser! De certa forma funcionou, mas segue com algum outro erro, pois a lista no console não está saindo ordena corretamente:

node quickSort.js
[
  { titulo: 'Python', preco: 20 },
  { titulo: 'Rust', preco: 22 },
  { titulo: 'PHP', preco: 15 },
  { titulo: 'Java', preco: 30 },
  { titulo: 'C#', preco: 33 },
  { titulo: 'JavaScript', preco: 25 },
  { titulo: 'C++', preco: 35 },
  { titulo: 'Ruby', preco: 28 },
  { titulo: 'Scala', preco: 40 },
  { titulo: 'Go', preco: 45 },
  { titulo: 'Elixir', preco: 50 }