Quick Sort
Quick Sort¶
O Quick Sort é um algoritmo de ordenação eficiente, rápido
baseado na técnica de divisão e conquista
.
É conhecido por sua capacidade de ordenar rapidamente grandes conjuntos de dados.
A complexidade de tempo média do Quick Sort é O(n log n), onde n é o número de elementos na lista. No
Funcionamento do Algoritmo¶
Escolha do Pivô
: Selecione um elemento da lista para ser o pivô. A escolha do pivô pode afetar significativamente o desempenho do algoritmo.Partição
: Reorganize a lista de forma que todos os elementos menores que o pivô fiquem à esquerda dele, e todos os elementos maiores fiquem à direita.Recursão
: Aplique o Quick Sort recursivamente às duas sublistas divididas pelo pivô.
Quick Sort em ação¶
Para visualizar o algoritmo em ação, utilize o link a seguir:
https://visualgo.net/en/sorting?slide=9
Implementação em Python¶
Aqui está uma implementação simples do Merge Sort em Python:
def quickSort(alist):
quicksort(alist, 0, len(alist) - 1)
def quicksort(lista, inicio, fim):
if inicio < fim:
pivo = dividir(lista, inicio, fim)
quicksort(lista, inicio, pivo - 1)
quicksort(lista, pivo + 1, fim)
def dividir(lista, inicio, fim):
pivo = lista[fim]
posicao_pivo = inicio
for i in range(inicio, fim):
if lista[i] < pivo:
lista[i], lista[posicao_pivo] = lista[posicao_pivo], lista[i]
posicao_pivo += 1
lista[posicao_pivo], lista[fim] = lista[fim], lista[posicao_pivo]
return posicao_pivo
Neste caso, como exemplo:
# Testa o algoritmo.
lista = [13, 30, 17, -1, -2, 27, 3]
quickSort(lista)
print("Lista ordenada:", lista)
Intuição da Análise de Complexidade¶
-
Complexidade de Tempo: A complexidade de tempo média do Quick Sort é O(n log n), tornando-o eficiente para grandes listas. No entanto, no pior caso, pode ser O(n²), especialmente se o pivô for escolhido de forma inadequada.
-
Complexidade de Espaço: A complexidade de espaço é O(log n) devido à pilha de chamadas de recursão.
Exercise
Rode o código quick-sort utilizando o python tutor. (https://pythontutor.com/)[https://pythontutor.com/]. Execute o código passo a passo compare a complexidade de espaço de memória com o bubble-sort. Ele ocupa mais ou menos espaço de memoria?
Exercise
Escreva uma função recursiva baseada no método do quick-sort que ordene de forma decrescente um vetor aleatório de 15 posições.
Progress
continuar...
Algumas referências:
- https://panda.ime.usp.br/algoritmos/static/algoritmos/20-divisao-e-conquista.html#dividir-para-conquistar
- https://algoritmosempython.com.br/cursos/algoritmos-python/pesquisa-ordenacao/mergesort/
- https://algs4.cs.princeton.edu/22mergesort/