2
respostas

[Dúvida] Dúvida sobre a função divideNoPivo

Estava analisando o código feita durante a aula e não entendi uma coisa. Na segunda linha dentro da função divideNoPivo, ela chama uma função encontraMenores para encontrar quantos elementos tem um valor menor do que o pivo. Eu não entendi como que essa função esta sendo usada nesta parte do código pois ela retorna um array, mas não entendi para onde esse array vai, o que está sendo feito com ele.

Aqui estão as funções:

function divideNoPivo(arr) {
    let pivo = arr[Math.floor(arr.length / 2)];
    encontraMenores(pivo, arr);
    let valoresMenores = 0;

    for (let analisando = 0; analisando < arr.length; analisando++) {
        let atual = arr[analisando];
        if (atual.preco <= pivo.preco && atual !== pivo) {
            trocaLugar(arr, analisando, valoresMenores);
            valoresMenores++
        }
    }

    return arr
}

function encontraMenores(pivo, arr) {
    let quantidadeMenores = 0 //quantidade de itens que tem o valor  menor que o pivo

    for (let atual = 0; atual < arr.length; atual++) {
        let produtoAtual = arr[atual]
        if (produtoAtual.preco < pivo.preco) {
            quantidadeMenores++
        }
    }

    trocaLugar(arr, arr.indexOf(pivo), quantidadeMenores)
    return arr
}
2 respostas

Estava analisando o código mais um pouco e acho que entendi agora: a função encontraMenores serve para posicionar o pivo no lugar certo?

Olá, Thaynara!

Na função divideNoPivo, a função encontraMenores é chamada para encontrar a quantidade de elementos que possuem um valor menor do que o pivô. No entanto, o array retornado por essa função não está sendo utilizado em nenhum lugar do código. Portanto, podemos dizer que essa chamada para a função encontraMenores é desnecessária e pode ser removida.

Aqui está o código atualizado da função divideNoPivo:

function divideNoPivo(arr) {
    let pivo = arr[Math.floor(arr.length / 2)];
    let valoresMenores = 0;

    for (let analisando = 0; analisando < arr.length; analisando++) {
        let atual = arr[analisando];
        if (atual.preco <= pivo.preco && atual !== pivo) {
            trocaLugar(arr, analisando, valoresMenores);
            valoresMenores++
        }
    }

    return arr;
}

Dessa forma, o código continua funcionando corretamente, sem a necessidade de utilizar o array retornado pela função encontraMenores.

Bons estudos!