O documento descreve vários algoritmos de ordenação como insertion sort, quick sort e counting sort. Ele também fornece uma heurística seletora para escolher qual algoritmo usar dependendo do tamanho e tipo de entrada, recomendando radix sort para strings, merge sort para entradas maiores que a memória e insertion sort para entradas menores que 22 elementos.
8. Algoritmos
● Quick Sort
○ Pouca sobrecarga
○ Espaço O(log(n))
○ Entrada que pode ser carregada na
memória principal
https://www.toptal.com/developers/sorting-algorithms/quick-sort
9. Algoritmos
● Counting Sort
○ Estável
○ Valores repetidos
● Radix Sort - MSD
○ Ordena chaves com múltiplos campos
○ Pode usar o Counting como subrotina
○ Bom para ordenar strings
10.
11. Heurística Seletora
● Verifique se a entrada contém caracteres não numéricos
○ Se sim aplique o Radix Sort
● Verifique se o tamanho da entrada é maior do que a
memória principal livre
○ Se sim aplique o Merge Sort
● Verifique se o tamanho da entrada é menor do que 22
○ Se sim aplique o Insertion Sort
● Para qualquer outro caso
○ Aplique o Quick Sort
12. “These days, real-world difference between two algorithms with exactly the same
Big-O asymptotic behaviour, can easily exceed 500x”.
http://ithare.com/some-big-os-are-bigger-than-others/
13. Introsort
● Quick Sort + Heap Sort
○ Quick Sort que altera para o Heap Sort quando a recursividade excede
um nível baseado no logaritmo do número de elementos a ser
classificado.
○ Complexidade do pior caso O(n log n)