Bom dia, Marcos!
Até onde pude entender, os "while" secundários funcionam como condições de continuidade dos procedimentos do "while" principal. A condição de parada está dentro do "while" primário.
Já esse condicional "if" é o recurso de substituição de elementos de um objeto. Agora, as chamadas das somas "atualEsquerda++" e "atualDireita--" dentro da função "if" são necessárias ao andamento do while. Elas promovem a atualização dos valores atuais dos índices à direita e à esquerda, respectivamente, para que o código faça uma nova operação.
Retire essas somas - temporariamente - do seu código e verá que não funcionará. Não se esqueça de pressionar "Ctrl C" no máximo um segundo após o início da iteração, para que não tenha problemas de hardware.
Veremos agora, pelo método de Jack, o que faz esse "if":
Considerando de antemão que a condição do "while" principal é verdadeira, a do "if" também será. Assim, se o índice atual à esquerda for menor ou igual ao índice atual à direita, será executada a função "trocaLugar".
Essa função trocará os elementos do objeto "array" de posição "atualEsquerda" com o de posição "atualDireita", ou seja, como exemplo, se o valor do índice "atualEsquerda" for 2 e o do "atualDireita" for 5, sendo 2 menor que 5, será feita a troca dos elementos vinculados a esses índices.
Ao final da troca, os índices "atualEsquerda" e "atualDireita" serão atualizados em "+1" e "-1", respectivamente, para que seja feita uma nova iteração, com outros elementos.
While secundários:
Contudo, no primeiro "while" secundário, enquanto o preço do elemento do objeto na posição "atualEsquerda" for menor que o preço do elemento "pivo", não será feita nenhuma mudança na ordenação do objeto e à posição "atualEsquerda" será adicionada 1.
Similarmente, no segundo "while", se o preço do elemento de posição "atualDireita" for maior que o do elemento "pivo", será reduzido em 1 o valor do índice da posição "atualDireita" e nenhuma alteração será feita à ordenação do objeto.
Essas são as duas condições de não alteração da ordem dos elementos dentro do objeto. A primeira condição é executada e, logo após, a segunda também é. Se qualquer umas das duas condições do tipo "while" ou ambas forem falsas, o "if" será executado.
Espero que não tenha te confundido mais.