2
respostas

[Dúvida] Dúvida com os if da função quickSort

Eu entendi bem o resto do código mas fiquei em dúvida sobre esses dois if que estão dentro da função quickSort. O que eles estão fazendo exatamente?

function quickSort(arr, indiceEsquerda, indiceDireita) {
    
    if(arr.length > 1) {
        
        let indiceAtual = particiona(arr, indiceEsquerda, indiceDireita)
        
        // os if que estou com dúvida
        if(indiceEsquerda < indiceAtual - 1){ //quando eu esqueci desse menos 1 fez um loop infinito
            quickSort(arr, indiceEsquerda, indiceAtual - 1)
        }

        if(indiceAtual < indiceDireita) {
            quickSort(arr, indiceAtual, indiceDireita)
        }
    }
    
    return arr

}
2 respostas

Olá Thaynara!

Os dois if que você mencionou dentro da função quickSort são responsáveis por verificar se é necessário chamar novamente a função quickSort para continuar ordenando o array.

No primeiro if, a condição indiceEsquerda < indiceAtual - 1 verifica se ainda existem elementos à esquerda do índice atual que precisam ser ordenados. Se sim, a função quickSort é chamada novamente passando o array, o índice esquerda e o índice atual - 1 como parâmetros. Isso garante que os elementos à esquerda do índice atual sejam ordenados.

No segundo if, a condição indiceAtual < indiceDireita verifica se ainda existem elementos à direita do índice atual que precisam ser ordenados. Se sim, a função quickSort é chamada novamente passando o array, o índice atual e o índice direita como parâmetros. Isso garante que os elementos à direita do índice atual sejam ordenados.

Essas chamadas recursivas da função quickSort são essenciais para que o algoritmo funcione corretamente e ordene todo o array.

Espero ter ajudado! Bons estudos!

Muito obrigada pela explicação, consegui entender melhor, mas agora me surgiu uma outra dúvida: como que essas verificações indiceEsquerda < indiceAtual - 1 e indiceAtual < indiceDireita é capaz de entender/saber se existe um elemento que ainda precisa ser ordenados só de verificar que um indice é menor que outro?