Quicksort
Escolhe um valor, o pivô, e coloca os valores menores à esquerda dele e os maiores à direita. Depois faz o mesmo com cada lado.
- Ω(n log n)
- Θ(n log n)
- O(n²)
- O(log n)
- não
- sim
Melhor caso: como o tempo cresce com o tamanho n da lista quando a entrada é a mais fácil para este algoritmo.
Caso médio: como o tempo costuma crescer com n. Com n², o dobro de valores leva cerca de quatro vezes mais tempo; n log n cresce bem menos.
Pior caso: o crescimento com a entrada mais difícil. Útil quando a velocidade nunca pode cair.
Memória: quanta memória extra é necessária além da lista. 1 significa algumas variáveis; n, uma cópia da lista.
Estável: dois valores iguais mantêm a ordem original. Importa ao ordenar por um só campo de um registro.
Sem memória extra: ordena dentro da própria lista, sem uma segunda lista.
- comparando
- movendo
- pivô
- na posição final
Experimente: Escolha uma lista invertida. O pivô é sempre o menor ou o maior valor restante, por isso um dos lados fica vazio e o custo sobe para n².
Como funciona
Aqui o pivô é o último valor do intervalo. Da esquerda para a direita, cada valor que não é maior que o pivô é trocado para o lado esquerdo. Depois o pivô vai para o meio dos dois lados, onde fica de vez. Cada lado é então ordenado do mesmo jeito.
Quando é uma boa escolha
Um dos jeitos mais rápidos de ordenar na prática, e quase não usa memória extra. Mas se ele escolher um pivô ruim toda vez, por exemplo em uma lista já ordenada, fica lento. As versões reais escolhem o pivô com mais cuidado.