Em um curso padrão de algoritmos, aprendemos que o quicksort é em média e no pior caso. Ao mesmo tempo, outros algoritmos de classificação são estudados que são no pior dos casos (como mergesort e heapsort ) e até tempo linear no melhor dos casos (como bubblesort ), mas com algumas necessidades adicionais de memória.O ( n 2 ) O ( n log n )
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 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).
Atualização 1: uma resposta canônica está dizendo que as constantes envolvidas no do caso médio são menores do que as constantes envolvidas em outros algoritmos . No entanto, ainda não vi uma justificativa adequada disso, com cálculos precisos, em vez de apenas idéias intuitivas.O ( n log n )
De qualquer forma, parece que a diferença real ocorre, como algumas respostas sugerem, no nível da memória, em que as implementações aproveitam a estrutura interna dos computadores, usando, por exemplo, que a memória cache é mais rápida que a RAM. A discussão já é interessante, mas eu ainda gostaria de ver mais detalhes com relação ao gerenciamento de memória, pois parece que a resposta tem a ver com isso.
Atualização 2: Existem várias páginas da Web que oferecem uma comparação de algoritmos de classificação, algumas mais sofisticadas que outras (principalmente a classificação- algorithms.com ). Além de apresentar uma boa ajuda visual, essa abordagem não responde à minha pergunta.