1
resposta

Maximum call stack size exceeded , alguém me ajuda.

não consigo resolver o código.

Lista utilizada:

const produtos = 
[
 {
    titulo:"Casa Monstro",
    preco:15,
},
{
    titulo:"Harry Potter",
    preco:50,
},
{
    titulo:"H.P.LoveCraft: mitos e lendas",
    preco:55,
},
{
    titulo:"A casa da arvore de 30 andares",
    preco: 30
},
{
    titulo:"O magico de Oz",
    preco: 18,
},
{
    titulo:"RezendeEvil vs Herobrine 2",
    preco: 27,
},
{
    titulo:"Um zumbi a rodo",
    preco:47,
},
]

module.exports = produtos;

código de troca de posição:

function trocaDeLugar(array,de,para){
    const elem1 = array[de];
    const elem2 = array[para];

    array[para] = elem1;
    array[de] = elem2;
}

arquivo do quickSort:

const produtos = require('./mergeSort1');
const trocaDeLugar = require('./pivo');

function quikSort (array,esquerda,direita){
    if(array.length > 1){
        let indiceAtual = particiona(array,esquerda,direita);
        if(esquerda < indiceAtual){
            quikSort(array,esquerda,indiceAtual - 1);
        }

        if(indiceAtual < esquerda){
            quikSort(array,direita,indiceAtual - 1);
        }
    }
    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){
            trocaDeLugar(array,atualEsquerda,atualDireita)
            atualEsquerda++
            atualDireita--
        }
    }

    return atualEsquerda;
}

console.log(quikSort(produtos,0,produtos.length - 1))

resultado obtido no terminal:

Windows PowerShell
Copyright (C) Microsoft Corporation. Todos os direitos reservados.

Experimente a nova plataforma cruzada PowerShell https://aka.ms/pscore6

PS C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS> node quickSort.js 
{ titulo: 'A casa da arvore de 30 andares', preco: 30 }
[
  { titulo: 'Casa Monstro', preco: 15 },
  { titulo: 'O magico de Oz', preco: 18 },
  { titulo: 'RezendeEvil vs Herobrine 2', preco: 27 },    
  { titulo: 'A casa da arvore de 30 andares', preco: 30 },
  { titulo: 'Harry Potter', preco: 50 },
  { titulo: 'H.P.LoveCraft: mitos e lendas', preco: 55 }, 
  { titulo: 'Um zumbi a rodo', preco: 47 }
]
C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:18
function particiona(array,esquerda,direita){
                   ^

RangeError: Maximum call stack size exceeded
    at particiona (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:18:20)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:6:27)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:8:13)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:8:13)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:8:13)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:8:13)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:8:13)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:8:13)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:8:13)
    at quikSort (C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS\quickSort.js:8:13)
PS C:\Users\alhan\OneDrive\Área de Trabalho\JavaScript\primeiro módulo de aprendizagem do JS>
1 resposta

Olá, Matheus,

Parece ter um problema na sua implementação da função quickSort(). Veja como fizemos no curso:

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

Espero ter ajudado! Bons estudos