Executando verificação de segurança...
1

Você aprende para saber quando usar e porque usar. As linguagens já te dão esses algoritmos prontos e otimizados, algumas inclusive permitem que você faça a escolha do algoritmo. Por exemplo, o .sort do javascript depende muito de qual implementação você está utilizando (V8, WebKit, Node, SpiderMonkey, Bun e etc), na maior parde das vezes, Arrays numéricas serão ordenadas com o std::qsort do C++, que é uma variação do quicksort, o introsort, que você sabe como se comporta, pois já conhece o quicksort.

Nessa pergunta no stackoverflow tem mais coisas a cerca do algoritmo utilizado pelo javascript.

Esses algoritmos podem ser classificados de acordo com três características principais (isso se aprende no primeiro ou segundo período de qualquer universidade):

  1. Uso de memória
  2. Estabilidade
  3. Complexidade (melhor, pior e caso médio)

Por exemplo, o mergesort é um algoritmo de complexidade O(nlog(n)), estável e com uso de memória de ordem n, onde n é o tamanho da array.

Isso significa que o mergesort utiliza muita memória para arrays muito grandes, por isso nesses casos, você não vai querer utilizar o mergesort.

Já o Quicksort é um algoritmo de complexidade O(nlog(n)), não estável com uso de memória de ordem n. Um algoritmo de ordenamento estável significa que o algoritmo não faz nenhuma troca em chaves iguais, por isso o quicksort não é estável, dependendo do caso, você precisa de um algoritmo estável (além de a complexidade ir para O(n²) quando se aproxima do pior caso).

O heapsort, por sua vez, é um algoritmo de complexidade O(nlog(n)), estável e de uso de memória na ordem 1, esse teoricamente é o melhor dos mundos para ordenamento, contudo é o algoritmo que faz mais alterações na array, pois precisa construir um max/min heap para realizar o ordenamento, o que faz ter um tempo grande de pré processamento em casos de arrays muito grandes.

Normalmente a própria especifiação ou implementação da linguagem irá decidir qual é o melhor a se utilizar, mas sempre será alguma variação desses três algoritmos, pois são os de menor complexidade. Vale lembrar também dos algoritmos para chaves inteiras (counting sort, radix sort e etc), que serão utilizados sempre que a sua array for composta apenas de chaves inteiras, pois tem uma performance muito maior.

Carregando publicação patrocinada...