8 min

Quick Sort

Algoritmo de ordenação eficiente que usa a estratégia dividir para conquistar, escolhendo um pivô e particionando o array.

MédiaO(n log n) / O(log n)OrdenaçãoDividir e ConquistarRecursivo

Visualizador Interativo

Array[ 5, 3, 8, 4, 2, 7, 1, 6 ]Passo 1 / 36
5
0
3
1
8
2
4
3
2
4
7
5
1
6
6
7
pivô
Pivô:6 (posição 7)
Velocidade:800ms
Historico de Passos
#0Particionando [0..7] com pivô 6 na posição 7

Como Funciona

O Quick Sort é um algoritmo de ordenação que usa a estratégia dividir para conquistar. Ele escolhe um elemento como pivô e particiona o array em dois subarrays: elementos menores que o pivô e elementos maiores. O processo é recursivo: após particionar, aplica o mesmo procedimento em cada subarray. Quando todos os subarrays têm tamanho 0 ou 1, o array está ordenado. Na prática, o Quick Sort é um dos algoritmos de ordenação mais rápidos, superando o Merge Sort em muitos casos por ter melhor localidade de cache e menor overhead de memória.

O pivô sempre termina na posição correta após a partição. A cada chamada recursiva, pelo menos um elemento (o pivô) é colocado na posição definitiva.

Passo a Passo

  1. Escolhe um pivô (geralmente o último elemento)
  2. Percorre o array comparando cada elemento com o pivô
  3. Elementos menores vão para a esquerda do pivô
  4. Elementos maiores ficam à direita
  5. O pivô é colocado na sua posição final
  6. Repete recursivamente para cada lado

Análise de Complexidade

⏱️Tempo
O(n log n)

Em média, cada partição divide o array pela metade, gerando log n níveis de recursão, cada um processando n elementos.

Ver prova

T(n) = 2T(n/2) + O(n). Pelo Teorema Mestre: O(n log n)

💾Espaco
O(log n)

Espaço usado pela pilha de recursão. No caso médio, a profundidade é log n.

🎯Melhor Caso
O(n log n)

Quando o pivô sempre divide o array em duas metades iguais.

⚠️Pior Caso
O(n²)

Quando o pivô é sempre o menor ou maior elemento (array já ordenado com pivô fixo).

Comparação com Outros Algoritmos

AlgoritmoTempoEspacoEstavelMelhor Para
Quick Sort(atual)O(n log n)O(log n)NaoUso geral, melhor performance média
Merge SortO(n log n)O(n)SimQuando estabilidade é necessária
Bubble SortO(n²)O(1)SimFins didáticos
Selection SortO(n²)O(1)NaoQuando trocas são caras

Dicas e Erros Comuns

  • Escolher sempre o primeiro elemento como pivô em arrays já ordenados (pior caso)
  • Não tratar corretamente partições de tamanho 0 ou 1
  • Confundir os índices durante a partição
  • Esquecer de incluir a troca final do pivô

Perguntas de Entrevista

Pratique respondendo a perguntas comuns de entrevistas tecnicas. Clique em uma pergunta para iniciar uma sessao de pratica com IA.

Implementacao

python
1def quick_sort(array, low=0, high=None):Definição
2 if high is None:
3 high = len(array) - 1
4
5 if low < high:Caso Base
6 pivot_index = partition(array, low, high)Partição
7 quick_sort(array, low, pivot_index - 1)Chamadas Recursivas
8 quick_sort(array, pivot_index + 1, high)Chamadas Recursivas
9
10 return array
11
12
13def partition(array, low, high):Partição
14 pivot = array[high]Pivô
15
16 i = low - 1
17
18 for j in range(low, high):
19 if array[j] <= pivot:Comparação
20 i += 1
21 array[i], array[j] = array[j], array[i]Troca
22
23 array[i + 1], array[high] = array[high], array[i + 1]Posicionamento do Pivô
24
25 return i + 1
26