DAA - Classificação Rápida

É usado com base no princípio de dividir e conquistar. A classificação rápida é um algoritmo de escolha em muitas situações, pois não é difícil de implementar. É um bom tipo de uso geral e consome relativamente menos recursos durante a execução.

Vantagens

  • Ele está no lugar, pois usa apenas uma pequena pilha auxiliar.

  • Requer apenas n (log n) hora de classificar n Itens.

  • Possui um laço interno extremamente curto.

  • Este algoritmo foi submetido a uma análise matemática completa, uma declaração muito precisa pode ser feita sobre questões de desempenho.

Desvantagens

  • É recursivo. Especialmente, se a recursão não estiver disponível, a implementação é extremamente complicada.

  • Requer tempo quadrático (isto é, n2) no pior caso.

  • É frágil, ou seja, um simples erro na implementação pode passar despercebido e causar um mau desempenho.

A classificação rápida funciona particionando um determinado array A[p ... r] em duas submatrizes não vazias A[p ... q] e A[q+1 ... r] de modo que cada chave em A[p ... q] é menor ou igual a cada chave em A[q+1 ... r].

Em seguida, os dois subarrays são classificados por chamadas recursivas para classificação rápida. A posição exata da partição depende da matriz e índice fornecidosq é calculado como parte do procedimento de particionamento.

Algorithm: Quick-Sort (A, p, r) 
if p < r then 
   q Partition (A, p, r) 
   Quick-Sort (A, p, q) 
   Quick-Sort (A, q + r, r)

Observe que para classificar a matriz inteira, a chamada inicial deve ser Quick-Sort (A, 1, length[A])

Como primeira etapa, a Classificação rápida escolhe um dos itens na matriz para ser classificado como pivô. Em seguida, a matriz é particionada em ambos os lados do pivô. Os elementos menores ou iguais ao pivô se moverão para a esquerda, enquanto os elementos maiores ou iguais ao pivô se moverão para a direita.

Particionando o Array

O procedimento de particionamento reorganiza as submatrizes no local.

Function: Partition (A, p, r) 
x ← A[p] 
i ← p-1 
j ← r+1 
while TRUE do 
   Repeat j ← j - 1 
   until A[j] ≤ x  
   Repeat i← i+1 
   until A[i] ≥ x  
   if i < j then  
      exchange A[i] ↔ A[j] 
   else  
      return j

Análise

O pior caso de complexidade do algoritmo Quick-Sort é O(n2). No entanto, usando essa técnica, em casos médios geralmente obtemos a saída emO(n log n) Tempo.