Nunca, jamais escolha um pivô fixo - ele pode ser atacado para explorar o pior caso de tempo de execução O (n ^ 2) do seu algoritmo, que está apenas pedindo problemas. O pior caso de tempo de execução do Quicksort ocorre quando o particionamento resulta em uma matriz de 1 elemento e uma matriz de n-1 elementos. Suponha que você escolha o primeiro elemento como sua partição. Se alguém alimentar seu algoritmo com uma matriz que está em ordem decrescente, seu primeiro pivô será o maior, de modo que todo o resto da matriz se moverá para a esquerda. Então, quando você recursa, o primeiro elemento será o maior novamente, então, mais uma vez, você coloca tudo à esquerda dele e assim por diante.
Uma técnica melhor é o método da mediana de 3, em que você escolhe três elementos aleatoriamente e escolhe o meio. Você sabe que o elemento que você escolher não será o primeiro ou o último, mas também, pelo teorema do limite central, a distribuição do elemento do meio será normal, o que significa que você tenderá para o meio (e, portanto, , n lg n tempo).
Se você realmente deseja garantir o tempo de execução O (nlgn) para o algoritmo, o método de colunas de 5 para encontrar a mediana de uma matriz é executado no tempo O (n), o que significa que a equação de recorrência para quicksort no pior caso seja T (n) = O (n) (encontre a mediana) + O (n) (partição) + 2T (n / 2) (retroceda à esquerda e à direita.) Pelo Teorema Mestre, este é O (n lg n) . No entanto, o fator constante será enorme e se o desempenho do pior caso for sua preocupação principal, use uma classificação por mesclagem, que é apenas um pouco mais lenta do que a classificação rápida em média e garante o tempo O (nlgn) (e será muito mais rápido do que este quicksort mediano coxo).
Explicação do Algoritmo da Mediana das Medianas