Esta é uma repostagem de uma pergunta no cs.SE por Janoma . Créditos completos e despojos para ele ou cs.SE.
Em um curso padrão de algoritmos, aprendemos que o quicksort é O (n log n) em média e O (n²) no pior caso. Ao mesmo tempo, outros algoritmos de classificação são estudados, que são O (n log n) no pior caso (como mergesort e heapsort ) e até tempo linear no melhor caso (como bubblesort ), mas com algumas necessidades adicionais de memória.
Após uma rápida olhada em mais alguns tempos de execução , é natural dizer que o quicksort não deve ser tão eficiente quanto os outros.
Além disso, considere que os alunos aprendem nos cursos básicos de programação que a recursão não é realmente boa em geral, porque poderia usar muita memória, etc. Portanto (e mesmo que este não seja um argumento real), isso dá a ideia de que o quicksort pode não ser muito bom porque é um algoritmo recursivo.
Por que, então, o quicksort supera outros algoritmos de classificação na prática? Isso tem a ver com a estrutura dos dados do mundo real ? Isso tem a ver com o modo como a memória funciona nos computadores? Sei que algumas memórias são muito mais rápidas que outras, mas não sei se essa é a verdadeira razão desse desempenho contra-intuitivo (quando comparado às estimativas teóricas).