Primeiro, uma definição, uma vez que é muito importante: uma classificação estável é aquela garantida para não reordenar elementos com chaves idênticas.
Recomendações:
Classificação rápida: quando você não precisa de uma classificação estável e o desempenho médio do caso importa mais do que o pior desempenho do caso. Uma classificação rápida é O (N log N) em média, O (N ^ 2) no pior caso. Uma boa implementação usa armazenamento auxiliar O (log N) na forma de espaço de pilha para recursão.
Classificação de mesclagem: quando você precisa de uma classificação O (N log N) estável, trata-se da sua única opção. A única desvantagem disso é que ele usa espaço auxiliar O (N) e tem uma constante um pouco maior que uma ordenação rápida. Existem algumas classificações de mesclagem no local, mas elas não são estáveis ou piores que O (N log N). Até as ordenações O (N log N) existentes têm uma constante muito maior que a ordenação antiga simples, que são mais curiosidades teóricas do que algoritmos úteis.
Classificação de pilha: quando você não precisa de uma classificação estável e se preocupa mais com o desempenho do pior caso do que com o desempenho médio do caso. Ele é garantido como O (N log N) e usa o espaço auxiliar O (1), o que significa que você não ficará inesperadamente sem espaço de pilha nem empilhará espaço em entradas muito grandes.
Introsort: Esta é uma classificação rápida que alterna para uma classificação de pilha após uma certa profundidade de recursão para contornar o pior caso de O (N ^ 2) da classificação rápida. É quase sempre melhor do que uma classificação rápida simples e antiga, já que você obtém o caso médio de uma classificação rápida, com desempenho garantido de O (N log N). Provavelmente, o único motivo para usar uma classificação de heap em vez disso é em sistemas com muita restrição de memória, nos quais o espaço de pilha O (log N) é praticamente significativo.
Classificação de inserção : quando N é garantidamente pequeno, inclusive como o caso base de uma classificação rápida ou de mesclagem. Embora seja O (N ^ 2), ele tem uma constante muito pequena e é um tipo estável.
Classificação por bolha, seleção : quando você está fazendo algo rápido e sujo e, por algum motivo, não pode usar o algoritmo de classificação da biblioteca padrão. A única vantagem que eles têm sobre a classificação por inserção é ser um pouco mais fácil de implementar.
Classificações sem comparação: sob algumas condições bastante limitadas, é possível quebrar a barreira O (N log N) e classificar em O (N). Aqui estão alguns casos em que vale a pena tentar:
Classificação de contagem: quando você classifica números inteiros com um intervalo limitado.
Classificação de raiz: quando log (N) é significativamente maior que K, onde K é o número de dígitos de raiz.
Classificação de intervalo: quando você pode garantir que sua entrada seja distribuída aproximadamente uniformemente.