Você está aqui: Python ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca) |
Como implementar a ordenação Quicksort em Python - Apostila de Python para iniciantesQuantidade de visualizações: 365 vezes |
A ordenação Quicksort é um dos algorítmos de ordenação mais encontrados em aplicações reais de programação. No Delphi esta ordenação é encontrada no objeto TList. No Java podemos encontrá-lo no método Arrays.sort(). Na linguagem C a ordenação Quicksort é implementada na função qsort() da biblioteca padrão. O algoritmo de ordenação Quicksort é do tipo dividir para conquistar (divide-and-conquer principle). Neste tipo de algoritmo o problema é dividido em sub-problemas e a solução é concatenada quando as chamadas recursivas atingirem o caso base. O vetor (ou array) a ser ordenado é dividido em duas sub-listas por um elemento chamado pivô, resultando em uma lista com elementos menores que o pivô e outra lista com os elementos maiores que o pivô. Esse processo é repetido para cada chamada recursiva. Sim, a ordenação Quicksort faz uso extensivo de recursividade, razão pela qual devemos ter muito cuidado para não estourar a pilha do sistema. Existem muitos estudos sobre o pivô ideal para a ordenação Quicksort. Nessa dica adotarei o último elemento do array ou sub-array como pivô. Em vetores não ordenados essa estratégia, em geral, resulta em uma boa escolha. Vamos ao código Python então? Veja um programa Python completo demonstrando o uso da ordenação Quicksort para um array de 10 elementos inteiros: # função principal do programa def main(): # vamos declarar um array de 10 elementos valores = [0 for x in range(10)] # vamos pedir ao usuário para informar os valores para o vetor for i in range(0, len(valores)): valores[i] = int(input("Informe o valor do elemento {0}: ".format(i))) # vamos mostrar o array informado print("\nO array informado foi:\n") for i in range(0, len(valores)): print(valores[i], end=" ") # vamos ordenar o vetor usando a ordenação Quicksort quick_sort(valores, 0, len(valores) - 1) print("\n\nO array ordenado é:\n") for i in range(0, len(valores)): print(valores[i], end=" ") print("\n\n") # função de implementação da ordenação Quicksort def quick_sort(vetor, inicio, fim): # o início é menor que o fim? if inicio < fim: # vamos obter o novo índice da partição indice_particao = particionar(vetor, inicio, fim) # efetuamos novas chamadas recursivas quick_sort(vetor, inicio, indice_particao - 1) quick_sort(vetor, indice_particao + 1, fim) # função que retorna o índice de partição def particionar(vetor, inicio, fim): # para guardar o pivô pivot = vetor[fim] i = (inicio - 1) for j in range(inicio, fim): if vetor[j] <= pivot: i = i + 1 # fazemos a troca temp = vetor[i] vetor[i] = vetor[j] vetor[j] = temp # efetua a troca temp = vetor[i + 1] vetor[i + 1] = vetor[fim] vetor[fim] = temp return i + 1 if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: Informe o valor do elemento 0: 7 Informe o valor do elemento 1: 2 Informe o valor do elemento 2: 43 Informe o valor do elemento 3: 1 Informe o valor do elemento 4: 9 Informe o valor do elemento 5: 6 Informe o valor do elemento 6: 22 Informe o valor do elemento 7: 3 Informe o valor do elemento 8: 37 Informe o valor do elemento 9: 5 O array informado foi: 7 2 43 1 9 6 22 3 37 5 O array ordenado é: 1 2 3 5 6 7 9 22 37 43 |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |