Ordenação e estabilidade
Traçar ordenações, provar a intercalação e distinguir garantias de pior caso e custos esperados.
Que algoritmo custa o quê
| Algoritmo | Quando é bom | Pior caso | Memória extra | Mantém empates |
|---|---|---|---|---|
| Seleção | Trocas caras e auxiliar | Não | ||
| Inserção | Entrada quase ordenada | Sim | ||
| Bubble com paragem | Entrada ordenada | Sim | ||
| Mergesort | Garantia em todos os casos | Sim | ||
| Quicksort | Caso médio rápido | Pilha até | Não |
- Seleção faz sempre
n(n-1)/2comparações. Em[2A,2B,1]troca o 1 para a frente e inverte os 2. - Inserção custa com
Iinversões. Só desloca elementos estritamente maiores. - Bubble só é linear com paragem quando não há trocas.
Intercalar sem falhar
Divide ao meio, ordena cada metade e junta pelas frentes. Na igualdade, tira da esquerda.
- Metades1 sai da direita, depois 2 da esquerda.
2, 61, 5 - ResultadoTrês comparações; o 6 final copia-se.
1256
Recorrência dá . Guarda um auxiliar de n e reutiliza-o. Em lista ligada, separa por ligações e intercala sem copiar valores; a pilha fica e std::list ordena-se com lista.sort().
Partir para o quicksort
Com pivô p=v[r-1] em [l,r):
- Varre
je mantém menores à esquerda dei. - Troca para
iquando encontra valor menor quep. - Põe o pivô em
ie resolve cada lado.
Em [5,2,7,1,4], o pivô 4 termina em [2,1,4,5,7]. Equilíbrio dá ; isolar um de cada vez dá . Pivô aleatório com chaves distintas dá esperado. Todas iguais continuam quadráticas em Lomuto; separa três grupos para evitar esse caso. Hoare devolve fronteira, não posição final do pivô.
Quando não basta comparar
- Um comparador válido define uma ordem fraca estrita:
comp(x,x)é falso,compé transitiva e a equivalência induzida também é transitiva.<=e diferenças com overflow falham. Referência: https://eel.is/c++draft/alg.sorting.general . sortgarante comparações sem estabilidade.stable_sortconserva empates.- Comparar tem limite no pior caso para chaves distintas.
- Counting com chaves em
[0,k): conta, prefixa e distribui da direita para a esquerda. Custa . - Radix LSD com
ddígitos de baseblê do menos para o mais significativo, sempre com passagem estável. Custa .