SlideShare una empresa de Scribd logo
1 de 9
An´alise de Desempenho de Algoritmos de Ordenac¸˜ao
Gustavo de Carvalho Sales1
1
Departamento de Inform´atica e Estat´ıstica – Universidade Federal do Piau´ı (UFPI)
Teresina – PI – Brasil
gt.salles@gmail.com
Abstract. This paper is intended to evaluate the performance of six sorting al-
gorithms of vectors through a software that performs the tests and generates a
chart to be analyzed. Also in the article, it will be analyzed the complexity of
each algorithm and associated with the result obtained in the tests.
Resumo. Este artigo destina-se a avaliar o desempenho de seis algoritmos de
ordenac¸˜ao de vetores atrav´es de um software que realiza os testes e gera um
gr´afico a ser analisado. Ainda no artigo, ser´a analisada a complexidade de
cada algoritmo e esta, associada com o resultado obtido nos testes.
1. Introduc¸˜ao
O objetivo desse trabalho ´e realizar a implementac¸˜ao e comparac¸˜ao de desempenho dos
principais algoritmos de ordenac¸˜ao existentes.
O c´odigo fonte foi escrito na linguagem de programac¸˜ao Python, utilizando as
bibliotecas PyQt e Matplotlib para a interface gr´afica e para a criac¸˜ao dos gr´aficos respec-
tivamente e a IDE Eclipse.
O Computador onde foram desenvolvidos os testes possui a seguinte configurac¸˜ao:
• Processador Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz
• 4GB de mem´oria RAM com frequˆencia de 1333Mhz
• Microsoft Windows 7 Ultimate 64 Bits
2. Especificac¸˜oes
O problema consiste em avaliar o desempenho dos seguintes algoritmos de ordenac¸˜ao de
vetores: Insertion Sort, Selection Sort, Bubble Sort, Merge Sort, Heap Sort e Quick Sort.
A avaliac¸˜ao ´e feita considerando o tempo de execuc¸˜ao dos algoritmos nas
seguintes condic¸˜oes:
• Vetores crescentes, decrescentes e aleat´orios
• O teste ´e realizado cinco vezes e ´e considerado como tempo final a m´edia dos
tempos das cinco execuc¸˜oes.
• Os algoritmos s˜ao executados para vetores com as seguintes quantidades de ele-
mentos: 1000, 5000, 10000, 20000, 30000 e 50000.
O software desenvolvido executa uma interface gr´afica onde ´e selecionado o al-
goritmo a ser utilizado. Uma vez que a execuc¸˜ao ´e iniciada, todo o resto do processo ´e
automatizado, o software executa para o algoritmo selecionado a ordenac¸˜ao dos trˆes tipos
de vetores e com as seis quantidades predefinidas. Ao final da execuc¸˜ao, s˜ao gerados
trˆes arquivos para cada algoritmo e ´e chamado o m´odulo que constr´oi o gr´afico lendo os
arquivos gerados pelo programa.
3. Desenvolvimento
Ordenar corresponde ao processo de rearranjar um conjunto de objetos em ordem as-
cendente ou descendente. O objetivo principal da ordenac¸˜ao ´e facilitar a recuperac¸˜ao
posterior de itens do conjunto ordenado.
A ordenac¸˜ao ´e uma operac¸˜ao fundamental em ciˆencia da computac¸˜ao (muitos pro-
gramas a utilizam como uma etapa intermedi´aria) e, como resultado, um grande n´umero
de bons algoritmos de ordenac¸˜ao tem sido desenvolvido. O melhor algoritmo para uma
determinada aplicac¸˜ao depende - entre outros fatores - do n´umero de itens a serem or-
denados, da extens˜ao em que os itens j´a est˜ao ordenados de algum modo, de poss´ıveis
restric¸˜oes sobre os valores de itens e da esp´ecie de dispositivo de armazenamento a ser
usado: mem´oria principal, discos ou fitas [Cormen et al. ].
3.1. Insertion Sort
Insertion sort ´e um algoritmo de ordenac¸˜ao simples, uma ordenac¸˜ao por comparac¸˜ao na
qual uma nova lista ´e constru´ıda um valor por vez. Isso ´e muito menos eficiente em
grandes listas do que outros algoritmos como quick sort, heap sort ou merge sort.
A complexidade do insertion sort no melhor caso ´e de Ω(n) de acordo com
[Ziviani 2004], visto que ele ir´a fazer n comparac¸˜oes e ver que o vetor j´a est´a ordenado.
No pior caso e no no caso m´edio a complexidade do insertion sort ´e de Θ(n2
).
Figure 1. Gr´afico de desempenho Insertion sort
Atrav´es do gr´afico percebe-se o desempenho incrivelmente superior para os ve-
tores ordenados, j´a que o algoritmo tem complexidade de Θ(n) no melhor caso. Con-
siderando que o vetor j´a est´a ordenado, a execuc¸˜ao apenas compara todos os elementos
com o elemento anterior, e n˜ao faz nenhuma troca.
1000 5000 10000 20000 30000 50000
Crescente 0.0 0.0 0.00199 0.00199 0.00419 0.00819
Decrescente 0.02800 0.68200 2.73639 11.41419 24.33819 73.61080
Aleat´orio 0.09866 0.99893 1.36220 5.45020 12.33840 34.30399
Table 1. Tabela de desempenho Insertion sort
No vetor decrescente (pior caso) ocorre o contr´ario do vetor crescente, j´a que a
complexidade ´e de Θ(n2
) o algoritmo compara todos os elementos do vetor com o ele-
mento anterior e faz todas as trocas poss´ıveis, assim o desempenho ca´ı consideravelmente,
por exemplo, no vetor crescente com 50000 elementos o tempo de execuc¸˜ao foi de 0.008
segundos enquanto no decrescente o tempo subiu para 73.61 segundos.
No vetor aleat´orio, que possui desempenho Θ(n2
) foi analisado atrav´es do gr´afico
que o desempenho fica entre o crescente e o decrescente.
Pode-se concluir ent˜ao que o algoritmo insertion sort ´e eficiente apenas para ve-
tores com pequenas entradas, por exemplo, a partir de 10000 elementos o algoritmo j´a se
torna bastante lento em relac¸˜ao a outros algoritmos.
3.2. Selection Sort
O selection sort ´e um algoritmo de ordenac¸˜ao baseado em se passar sempre o menor valor
do vetor para a primeira posic¸˜ao (ou o maior dependendo da ordem requerida), depois o
de segundo menor valor para a segunda posic¸˜ao, e assim ´e feito sucessivamente com os
(n − 1) elementos restantes, at´e os ´ultimos dois elementos.
Figure 2. Gr´afico de desempenho Selection sort
1000 5000 10000 20000 30000 50000
Crescente 0.04000 1.05019 4.53920 21.07679 54.80159 199.60179
Decrescente 0.04400 1.03819 4.84339 22.37839 62.41919 218.79639
Aleat´orio 0.04400 1.028201 4.79580 22.62439 61.91779 158.87400
Table 2. Tabela de desempenho Selection sort
O algoritmo selection sort tem complexidade Θ(n2
) em todos os casos, ent˜ao o
desempenho vai ser bastante parecido em todos os tipos de vetores, com um desempenho
um pouco inferior nos vetores aleat´orios, por exemplo, at´e 30000 elementos o tempo de
execuc¸˜ao do algoritmo ´e praticamente igual independente do tipo de vetor, a diferenc¸a s´o
comec¸a a ser notada a partir de 50000 elementos.
Assim como o algoritmo insertion sort, o selection sort tamb´em s´o se mostra efi-
ciente com vetores com quantidades pequenas de elementos.
3.3. Bubble Sort
O bubble sort, ou ordenac¸˜ao por flutuac¸˜ao, ´e um algoritmo de ordenac¸˜ao dos mais simples.
A ideia ´e percorrer o vetor diversas vezes, a cada passagem fazendo flutuar para o topo
o maior elemento da sequˆencia. Essa movimentac¸˜ao lembra a forma como as bolhas em
um tanque de ´agua procuram seu pr´oprio n´ıvel, e disso vem o nome do algoritmo.
No melhor caso, o algoritmo executa n operac¸˜oes relevantes, onde n representa o
n´umero de elementos do vetor. No pior caso, s˜ao feitas O(n2
) operac¸˜oes. A complexidade
desse algoritmo ´e de ordem quadr´atica. Por isso, ele n˜ao ´e recomendado para programas
que precisem de velocidade e operem com quantidade elevada de dados.
Figure 3. Gr´afico de desempenho Bubble sort
1000 5000 10000 20000 30000 50000
Crescente 0.0 0.0 0.0 0.00533 0.0 0.00500
Decrescente 0.10933 2.32466 9.08533 36.18733 82.94066 237.40766
Aleat´orio 0.06766 1.49266 5.9179 23.69166 54.61099 170.46166
Table 3. Tabela de desempenho Bubble sort
O algoritmo bubble sort possui um desempenho bastante parecido com o algo-
ritmo insertion sort. Analisando o gr´afico nota-se que o tempo de execuc¸˜ao para vetores
crescentes ´e sempre muito baixo, sempre pr´oximo a zero segundos.
No pior caso, quando o vetor ´e decrescente, o algoritmo precisar´a percorrer o
vetor inteiro e ir´a fazer o m´aximo de trocas poss´ıveis, diminuindo consideravelmente o
desempenho.
As posic¸˜oes dos elementos no bubble sort desempenham um papel fundamental
para determinar a performance da execuc¸˜ao do algotimo. Por exemplo, grandes elementos
no in´ıcio da lista n˜ao demonstram um problema t˜ao grande, eles podem ser facilmente
trocados de posic¸˜ao, ao contr´ario de pequenos elementos no final da lista, pois a sua
movimentac¸˜ao para o in´ıcio ser´a muito lenta. Esses tipos de elementos s˜ao chamados de
lebres e tartarugas respectivamente.
Sobre este algoritmo conclui-se que a sua utilizac¸˜ao s´o em vantajosa em vetores
com entradas pequenas e de preferˆencia aleat´orios. O tempo de execuc¸˜ao para vetores
decrescente e consideravelmente maior em relac¸˜ao a vetores aleat´orios e mais ainda em
relac¸˜ao a vetores crescentes.
3.4. Merge Sort
O merge sort, ou ordenac¸˜ao por mistura, ´e um exemplo de algoritmo de ordenac¸˜ao do tipo
dividir-para-conquistar.
Sua id´eia b´asica ´e muito f´acil: criar uma sequˆencia ordenada a partir de duas
outras tamb´em ordenadas. Para isso, ele divide a sequˆencia original em pares de dados,
ordena-as; depois as agrupa em sequˆencias de quatro elementos, e assim por diante, at´e
ter toda a sequˆencia dividida em apenas duas partes.
Os trˆes passos ´uteis dos algoritmos dividir-para-conquistar, que se aplicam ao
merge sort s˜ao:
• Dividir: Dividir os dados em subsequˆencias pequenas;
• Conquistar: Classificar as duas metades recursivamente aplicando o merge sort;
• Combinar: Juntar as duas metades em um ´unico conjunto j´a classificado.
1000 5000 10000 20000 30000 50000
Crescente 0.01566 0.03099 0.06233 0.13533 0.20800 0.36400
Decrescente 0.01033 0.03133 0.08833 0.13533 0.20799 0.36933
Aleat´orio 0.01033 0.03133 0.08333 0.14033 0.21333 0.37433
Table 4. Tabela de desempenho Merge sort
O algoritmo merge sort possui complexidade Θ(n log n) para todos os casos.
Como a estrat´egia do algoritmo consiste em dividir o problema em problemas menores
Figure 4. Gr´afico de desempenho Merge sort
at´e que a soluc¸˜ao seja trivial, o desempenho vai ser o mesmo independente do tipo de
vetor, assim, os desempenhos dos trˆes tipos de vetores s˜ao bastante pr´oximos.
Analisando o gr´afico e as tabelas percebe-se que o tempo de execuc¸˜ao mais lento
no algoritmo merge sort que foi para um vetor aleat´orio de 50000 posic¸˜oes foi de 0.37
segundos, um tempo consideravelmente melhor em relac¸˜ao aos outros algoritmos j´a anal-
isados at´e o momento.
3.5. Heap Sort
Heap sort ´e um m´etodo de ordenac¸˜ao cujo princ´ıpio de funcionamento ´e o mesmo
princ´ıpio utilizado para a ordenac¸˜ao por selec¸˜ao, a saber: selecione o menor item do
vetor e a seguir troque-o com o item que est´a na primeira posic¸˜ao do vetor; repita estas
duas operac¸˜oes com os n − 1 itens restantes, depois com os n − 2 itens, e assim suces-
sivamente. O custo para encontrar o menor (ou o maior) item entre n itens custa n − 1
comparac¸˜oes. [Ziviani 2004]
De acordo com [Ziviani 2004] o algoritmo heap sort possui complexidade
O(n log n) independente da entrada. Esse ´e um limite superior, mas n˜ao ´e assintotica-
mente restrito segundo [Cormen et al. ] que afirma que no melhor caso o desempenho ´e
de Ω(n log n) em todas as situac¸˜oes.
A execuc¸˜ao deste algoritmo de d´a da seguinte forma:
• O primeiro passo ´e construir o heap a partir dos dados.
• Depois disso s˜ao retirados os maiores valores da heap e colocados no novo array
ordenado. Para esse primeiro elemento, ele deve ser a posic¸˜ao 0 do array.
• O pr´oximo passo ´e a reconstruc¸˜ao do heap e a remoc¸˜ao do pr´oximo maior ele-
mento e a inserc¸˜ao deste elemento no array ordenado.
• Depois de removidos todos os elementos da heap, o array est´a ordenado.
A direc¸˜ao dos elementos sorteados pode variar atrav´es da escolha do heap m´ınimo ou
heap m´aximo no primeiro passo.
Figure 5. Gr´afico de desempenho Heap sort
1000 5000 10000 20000 30000 50000
Crescente 0.02066 0.05733 0.10900 0.23900 0.37966 0.65533
Decrescente 0.01566 0.07300 0.11433 0.24966 0.36899 0.63433
Aleat´orio 0.01033 0.06233 0.11433 0.25466 0.36933 0.66566
Table 5. Tabela de desempenho Heap sort
Apesar de o heap sort e o merge sort possu´ırem a mesma complexidade o algo-
ritmo merge sort possui um desempenho um pouco melhor em relac¸˜ao ao heap sort. Por
exemplo para qualquer tipo de vetor com 50000 elementos o algoritmo merge sort executa
quase que na metade do tempo do heap sort.
3.6. Quick Sort
O quick sort ´e um algoritmo de ordenac¸˜ao cujo tempo de execuc¸˜ao do pior caso ´e de Θ(n2
)
sobre um arranjo de entrada de n n´umeros. Apesar desse tempo de execuc¸˜ao lento no pior
caso, o quick sort com frequˆencia ´e a melhor opc¸˜ao pr´atica para ordenac¸˜ao, devido a sua
not´avel eficiˆencia na m´edia: seu tempo de execuc¸˜ao esperado ´e Θ(n lg n), e os fatores
constantes ocultos na notac¸˜ao Θ(n lg n) s˜ao bastante pequenos. Ele tamb´em apresenta
a vantagem da ordenac¸˜ao local e funciona bem at´e mesmo em ambientes de mem´oria
virtual. [Cormen et al. ]
Figure 6. Gr´afico de desempenho Quick sort
1000 5000 10000 20000 30000 50000
Crescente 0.01033 0.02066 0.03133 0.07266 0.08833 0.18699
Decrescente 0.0 0.01566 0.03133 0.06766 0.09366 0.19233
Aleat´orio 0.00533 0.02066 0.04133 0.07799 0.11966 0.21833
Table 6. Tabela de desempenho Quick sort
O algoritmo quick sort ´e de longe o melhor algoritmo de ordenac¸˜ao existente, a sua
execuc¸˜ao dura menos do que a metade do tempo em relac¸˜ao a qualquer outro algoritmo
em qualquer outra condic¸˜ao.
4. Conclus˜ao
Feitas todas as an´alises pode-se concluir que:
• A relac¸˜ao Heap sort / Quick sort se mant´em constante para todos os tamanhos,
sendo o Heap sort mais lento.
• O algoritmo Insertion sort ´e o mais r´apido para qualquer tamanho se os elementos
est˜ao ordenados e ´e o mais lento para qualquer tamanho se os elementos est˜ao em
ordem decrescente.
• Entre os algoritmos de complexidade O(n2
), o insertion sort ´e melhor para todos
os tamanhos aleat´orios experimentados.
References
Cormen, T. H., Leiserson, C. E., Rivest, R. L., and Stein, C. Algoritmos: Teoria e pr´atica.
Campus, 2nd edition.
Ziviani, N. (2004). Projeto de Algoritmos: com implementac¸˜oes em Pascal e C. Cengage
Learning (Thomson / Pioneira), S˜ao Paulo, 1st edition.

Más contenido relacionado

La actualidad más candente

Técnica de busca - Bubble Sort
Técnica de busca - Bubble SortTécnica de busca - Bubble Sort
Técnica de busca - Bubble SortBruno Oliveira
 
Comparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoComparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoLenon Fachiano
 
A Arte de Escrever User Stories: Quais são os segredos
A Arte de Escrever User Stories: Quais são os segredosA Arte de Escrever User Stories: Quais são os segredos
A Arte de Escrever User Stories: Quais são os segredosCarlos Eduardo Polegato
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Gercélia Ramos
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Framework de automação de teste Robotium
Framework de automação de teste RobotiumFramework de automação de teste Robotium
Framework de automação de teste RobotiumBenicio Ávila
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaDaniel Arndt Alves
 

La actualidad más candente (20)

Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Revista Prosoft
Revista ProsoftRevista Prosoft
Revista Prosoft
 
Exemplo de Plano de testes
Exemplo de Plano de testes Exemplo de Plano de testes
Exemplo de Plano de testes
 
Aula 6 - Qualidade de Software
Aula 6 - Qualidade de SoftwareAula 6 - Qualidade de Software
Aula 6 - Qualidade de Software
 
Apostila modelagem de banco de dados
Apostila modelagem de banco de dadosApostila modelagem de banco de dados
Apostila modelagem de banco de dados
 
Técnica de busca - Bubble Sort
Técnica de busca - Bubble SortTécnica de busca - Bubble Sort
Técnica de busca - Bubble Sort
 
Aula 06 - Diagrama de classes
Aula 06 - Diagrama de classesAula 06 - Diagrama de classes
Aula 06 - Diagrama de classes
 
JAVA - Matrizes
JAVA - MatrizesJAVA - Matrizes
JAVA - Matrizes
 
Comparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoComparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de Ordenação
 
Bubble Sort
Bubble SortBubble Sort
Bubble Sort
 
Sistemas Digitais Aula 29-08-18
Sistemas Digitais Aula 29-08-18Sistemas Digitais Aula 29-08-18
Sistemas Digitais Aula 29-08-18
 
A Arte de Escrever User Stories: Quais são os segredos
A Arte de Escrever User Stories: Quais são os segredosA Arte de Escrever User Stories: Quais são os segredos
A Arte de Escrever User Stories: Quais são os segredos
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Selection Sort
Selection SortSelection Sort
Selection Sort
 
Framework de automação de teste Robotium
Framework de automação de teste RobotiumFramework de automação de teste Robotium
Framework de automação de teste Robotium
 
Shell sort[1]
Shell sort[1]Shell sort[1]
Shell sort[1]
 
Quicksort
QuicksortQuicksort
Quicksort
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da Disciplina
 

Destacado

Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoOrlando Junior
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenaçãoDaiana de Ávila
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasDelacyr Ferreira
 
métodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortmétodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortAlessandro Trevisan
 
Análise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação InternaAnálise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação InternaJohnnatan Messias
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaDelacyr Ferreira
 
01 algorimos e complexidade introduç o
01   algorimos e complexidade introduç o01   algorimos e complexidade introduç o
01 algorimos e complexidade introduç oCravid Ekuikui
 
Comparativo bubble sort e quick sort
Comparativo bubble sort e quick sortComparativo bubble sort e quick sort
Comparativo bubble sort e quick sortDaiana de Ávila
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesMauricio Volkweis Astiazara
 
Árvores binárias balanceadas
Árvores binárias balanceadasÁrvores binárias balanceadas
Árvores binárias balanceadasrenatopaschoal
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 

Destacado (20)

Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenação
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
métodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortmétodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sort
 
Cap 01
Cap 01Cap 01
Cap 01
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Análise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação InternaAnálise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação Interna
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise Assintótica
 
Análise de Algoritmos
Análise de AlgoritmosAnálise de Algoritmos
Análise de Algoritmos
 
01 algorimos e complexidade introduç o
01   algorimos e complexidade introduç o01   algorimos e complexidade introduç o
01 algorimos e complexidade introduç o
 
Comparativo bubble sort e quick sort
Comparativo bubble sort e quick sortComparativo bubble sort e quick sort
Comparativo bubble sort e quick sort
 
Aula analise algoritmos
Aula analise algoritmosAula analise algoritmos
Aula analise algoritmos
 
Análise de algoritmo
Análise de algoritmoAnálise de algoritmo
Análise de algoritmo
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de Chaves
 
Algoritmo de Rabin-Karp
Algoritmo de Rabin-KarpAlgoritmo de Rabin-Karp
Algoritmo de Rabin-Karp
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Árvores binárias balanceadas
Árvores binárias balanceadasÁrvores binárias balanceadas
Árvores binárias balanceadas
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 

Similar a Análise de desempenho de algoritmos de ordenação

Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
 
Tutorial aed iii 005 - algoritmo de ordenação quicksort
Tutorial aed iii   005 - algoritmo de ordenação quicksortTutorial aed iii   005 - algoritmo de ordenação quicksort
Tutorial aed iii 005 - algoritmo de ordenação quicksortFlávio Freitas
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptssuserd654cb1
 
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NACloves da Rocha
 
SysSorting Professional
SysSorting ProfessionalSysSorting Professional
SysSorting ProfessionalMichel Alves
 
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Eduardo de Lucena Falcão
 
Ordenação de pares e ímpares
Ordenação de pares e ímparesOrdenação de pares e ímpares
Ordenação de pares e ímparesDiego Lusa
 
Processamento Paralelo exemplo do Crivo de Erstótenes Paralelo e Sequencial
Processamento Paralelo exemplo do Crivo de Erstótenes Paralelo e SequencialProcessamento Paralelo exemplo do Crivo de Erstótenes Paralelo e Sequencial
Processamento Paralelo exemplo do Crivo de Erstótenes Paralelo e SequencialJaffer Veronezi
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoJonas Mendonça
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Aula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingAula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingFelipe
 
Aula6 programação
Aula6 programaçãoAula6 programação
Aula6 programaçãoIFPB
 
Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Leinylson Fontinele
 
Algoritmo estruturado
Algoritmo estruturadoAlgoritmo estruturado
Algoritmo estruturadodasko
 

Similar a Análise de desempenho de algoritmos de ordenação (20)

Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
Tutorial aed iii 005 - algoritmo de ordenação quicksort
Tutorial aed iii   005 - algoritmo de ordenação quicksortTutorial aed iii   005 - algoritmo de ordenação quicksort
Tutorial aed iii 005 - algoritmo de ordenação quicksort
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
 
SysSorting Professional
SysSorting ProfessionalSysSorting Professional
SysSorting Professional
 
0001
00010001
0001
 
000003 complexidade
000003 complexidade000003 complexidade
000003 complexidade
 
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
 
Ordenação de pares e ímpares
Ordenação de pares e ímparesOrdenação de pares e ímpares
Ordenação de pares e ímpares
 
Processamento Paralelo exemplo do Crivo de Erstótenes Paralelo e Sequencial
Processamento Paralelo exemplo do Crivo de Erstótenes Paralelo e SequencialProcessamento Paralelo exemplo do Crivo de Erstótenes Paralelo e Sequencial
Processamento Paralelo exemplo do Crivo de Erstótenes Paralelo e Sequencial
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Analise Algoritmos
Analise AlgoritmosAnalise Algoritmos
Analise Algoritmos
 
Aula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingAula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic tagging
 
Aula6 programação
Aula6 programaçãoAula6 programação
Aula6 programação
 
Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)
 
Pi raciocinio lógico
Pi   raciocinio lógicoPi   raciocinio lógico
Pi raciocinio lógico
 
apostila matlab
apostila matlabapostila matlab
apostila matlab
 
Algoritmo estruturado
Algoritmo estruturadoAlgoritmo estruturado
Algoritmo estruturado
 

Análise de desempenho de algoritmos de ordenação

  • 1. An´alise de Desempenho de Algoritmos de Ordenac¸˜ao Gustavo de Carvalho Sales1 1 Departamento de Inform´atica e Estat´ıstica – Universidade Federal do Piau´ı (UFPI) Teresina – PI – Brasil gt.salles@gmail.com Abstract. This paper is intended to evaluate the performance of six sorting al- gorithms of vectors through a software that performs the tests and generates a chart to be analyzed. Also in the article, it will be analyzed the complexity of each algorithm and associated with the result obtained in the tests. Resumo. Este artigo destina-se a avaliar o desempenho de seis algoritmos de ordenac¸˜ao de vetores atrav´es de um software que realiza os testes e gera um gr´afico a ser analisado. Ainda no artigo, ser´a analisada a complexidade de cada algoritmo e esta, associada com o resultado obtido nos testes. 1. Introduc¸˜ao O objetivo desse trabalho ´e realizar a implementac¸˜ao e comparac¸˜ao de desempenho dos principais algoritmos de ordenac¸˜ao existentes. O c´odigo fonte foi escrito na linguagem de programac¸˜ao Python, utilizando as bibliotecas PyQt e Matplotlib para a interface gr´afica e para a criac¸˜ao dos gr´aficos respec- tivamente e a IDE Eclipse. O Computador onde foram desenvolvidos os testes possui a seguinte configurac¸˜ao: • Processador Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz • 4GB de mem´oria RAM com frequˆencia de 1333Mhz • Microsoft Windows 7 Ultimate 64 Bits 2. Especificac¸˜oes O problema consiste em avaliar o desempenho dos seguintes algoritmos de ordenac¸˜ao de vetores: Insertion Sort, Selection Sort, Bubble Sort, Merge Sort, Heap Sort e Quick Sort. A avaliac¸˜ao ´e feita considerando o tempo de execuc¸˜ao dos algoritmos nas seguintes condic¸˜oes: • Vetores crescentes, decrescentes e aleat´orios • O teste ´e realizado cinco vezes e ´e considerado como tempo final a m´edia dos tempos das cinco execuc¸˜oes. • Os algoritmos s˜ao executados para vetores com as seguintes quantidades de ele- mentos: 1000, 5000, 10000, 20000, 30000 e 50000. O software desenvolvido executa uma interface gr´afica onde ´e selecionado o al- goritmo a ser utilizado. Uma vez que a execuc¸˜ao ´e iniciada, todo o resto do processo ´e automatizado, o software executa para o algoritmo selecionado a ordenac¸˜ao dos trˆes tipos de vetores e com as seis quantidades predefinidas. Ao final da execuc¸˜ao, s˜ao gerados trˆes arquivos para cada algoritmo e ´e chamado o m´odulo que constr´oi o gr´afico lendo os arquivos gerados pelo programa.
  • 2. 3. Desenvolvimento Ordenar corresponde ao processo de rearranjar um conjunto de objetos em ordem as- cendente ou descendente. O objetivo principal da ordenac¸˜ao ´e facilitar a recuperac¸˜ao posterior de itens do conjunto ordenado. A ordenac¸˜ao ´e uma operac¸˜ao fundamental em ciˆencia da computac¸˜ao (muitos pro- gramas a utilizam como uma etapa intermedi´aria) e, como resultado, um grande n´umero de bons algoritmos de ordenac¸˜ao tem sido desenvolvido. O melhor algoritmo para uma determinada aplicac¸˜ao depende - entre outros fatores - do n´umero de itens a serem or- denados, da extens˜ao em que os itens j´a est˜ao ordenados de algum modo, de poss´ıveis restric¸˜oes sobre os valores de itens e da esp´ecie de dispositivo de armazenamento a ser usado: mem´oria principal, discos ou fitas [Cormen et al. ]. 3.1. Insertion Sort Insertion sort ´e um algoritmo de ordenac¸˜ao simples, uma ordenac¸˜ao por comparac¸˜ao na qual uma nova lista ´e constru´ıda um valor por vez. Isso ´e muito menos eficiente em grandes listas do que outros algoritmos como quick sort, heap sort ou merge sort. A complexidade do insertion sort no melhor caso ´e de Ω(n) de acordo com [Ziviani 2004], visto que ele ir´a fazer n comparac¸˜oes e ver que o vetor j´a est´a ordenado. No pior caso e no no caso m´edio a complexidade do insertion sort ´e de Θ(n2 ). Figure 1. Gr´afico de desempenho Insertion sort Atrav´es do gr´afico percebe-se o desempenho incrivelmente superior para os ve- tores ordenados, j´a que o algoritmo tem complexidade de Θ(n) no melhor caso. Con- siderando que o vetor j´a est´a ordenado, a execuc¸˜ao apenas compara todos os elementos com o elemento anterior, e n˜ao faz nenhuma troca.
  • 3. 1000 5000 10000 20000 30000 50000 Crescente 0.0 0.0 0.00199 0.00199 0.00419 0.00819 Decrescente 0.02800 0.68200 2.73639 11.41419 24.33819 73.61080 Aleat´orio 0.09866 0.99893 1.36220 5.45020 12.33840 34.30399 Table 1. Tabela de desempenho Insertion sort No vetor decrescente (pior caso) ocorre o contr´ario do vetor crescente, j´a que a complexidade ´e de Θ(n2 ) o algoritmo compara todos os elementos do vetor com o ele- mento anterior e faz todas as trocas poss´ıveis, assim o desempenho ca´ı consideravelmente, por exemplo, no vetor crescente com 50000 elementos o tempo de execuc¸˜ao foi de 0.008 segundos enquanto no decrescente o tempo subiu para 73.61 segundos. No vetor aleat´orio, que possui desempenho Θ(n2 ) foi analisado atrav´es do gr´afico que o desempenho fica entre o crescente e o decrescente. Pode-se concluir ent˜ao que o algoritmo insertion sort ´e eficiente apenas para ve- tores com pequenas entradas, por exemplo, a partir de 10000 elementos o algoritmo j´a se torna bastante lento em relac¸˜ao a outros algoritmos. 3.2. Selection Sort O selection sort ´e um algoritmo de ordenac¸˜ao baseado em se passar sempre o menor valor do vetor para a primeira posic¸˜ao (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posic¸˜ao, e assim ´e feito sucessivamente com os (n − 1) elementos restantes, at´e os ´ultimos dois elementos. Figure 2. Gr´afico de desempenho Selection sort
  • 4. 1000 5000 10000 20000 30000 50000 Crescente 0.04000 1.05019 4.53920 21.07679 54.80159 199.60179 Decrescente 0.04400 1.03819 4.84339 22.37839 62.41919 218.79639 Aleat´orio 0.04400 1.028201 4.79580 22.62439 61.91779 158.87400 Table 2. Tabela de desempenho Selection sort O algoritmo selection sort tem complexidade Θ(n2 ) em todos os casos, ent˜ao o desempenho vai ser bastante parecido em todos os tipos de vetores, com um desempenho um pouco inferior nos vetores aleat´orios, por exemplo, at´e 30000 elementos o tempo de execuc¸˜ao do algoritmo ´e praticamente igual independente do tipo de vetor, a diferenc¸a s´o comec¸a a ser notada a partir de 50000 elementos. Assim como o algoritmo insertion sort, o selection sort tamb´em s´o se mostra efi- ciente com vetores com quantidades pequenas de elementos. 3.3. Bubble Sort O bubble sort, ou ordenac¸˜ao por flutuac¸˜ao, ´e um algoritmo de ordenac¸˜ao dos mais simples. A ideia ´e percorrer o vetor diversas vezes, a cada passagem fazendo flutuar para o topo o maior elemento da sequˆencia. Essa movimentac¸˜ao lembra a forma como as bolhas em um tanque de ´agua procuram seu pr´oprio n´ıvel, e disso vem o nome do algoritmo. No melhor caso, o algoritmo executa n operac¸˜oes relevantes, onde n representa o n´umero de elementos do vetor. No pior caso, s˜ao feitas O(n2 ) operac¸˜oes. A complexidade desse algoritmo ´e de ordem quadr´atica. Por isso, ele n˜ao ´e recomendado para programas que precisem de velocidade e operem com quantidade elevada de dados. Figure 3. Gr´afico de desempenho Bubble sort
  • 5. 1000 5000 10000 20000 30000 50000 Crescente 0.0 0.0 0.0 0.00533 0.0 0.00500 Decrescente 0.10933 2.32466 9.08533 36.18733 82.94066 237.40766 Aleat´orio 0.06766 1.49266 5.9179 23.69166 54.61099 170.46166 Table 3. Tabela de desempenho Bubble sort O algoritmo bubble sort possui um desempenho bastante parecido com o algo- ritmo insertion sort. Analisando o gr´afico nota-se que o tempo de execuc¸˜ao para vetores crescentes ´e sempre muito baixo, sempre pr´oximo a zero segundos. No pior caso, quando o vetor ´e decrescente, o algoritmo precisar´a percorrer o vetor inteiro e ir´a fazer o m´aximo de trocas poss´ıveis, diminuindo consideravelmente o desempenho. As posic¸˜oes dos elementos no bubble sort desempenham um papel fundamental para determinar a performance da execuc¸˜ao do algotimo. Por exemplo, grandes elementos no in´ıcio da lista n˜ao demonstram um problema t˜ao grande, eles podem ser facilmente trocados de posic¸˜ao, ao contr´ario de pequenos elementos no final da lista, pois a sua movimentac¸˜ao para o in´ıcio ser´a muito lenta. Esses tipos de elementos s˜ao chamados de lebres e tartarugas respectivamente. Sobre este algoritmo conclui-se que a sua utilizac¸˜ao s´o em vantajosa em vetores com entradas pequenas e de preferˆencia aleat´orios. O tempo de execuc¸˜ao para vetores decrescente e consideravelmente maior em relac¸˜ao a vetores aleat´orios e mais ainda em relac¸˜ao a vetores crescentes. 3.4. Merge Sort O merge sort, ou ordenac¸˜ao por mistura, ´e um exemplo de algoritmo de ordenac¸˜ao do tipo dividir-para-conquistar. Sua id´eia b´asica ´e muito f´acil: criar uma sequˆencia ordenada a partir de duas outras tamb´em ordenadas. Para isso, ele divide a sequˆencia original em pares de dados, ordena-as; depois as agrupa em sequˆencias de quatro elementos, e assim por diante, at´e ter toda a sequˆencia dividida em apenas duas partes. Os trˆes passos ´uteis dos algoritmos dividir-para-conquistar, que se aplicam ao merge sort s˜ao: • Dividir: Dividir os dados em subsequˆencias pequenas; • Conquistar: Classificar as duas metades recursivamente aplicando o merge sort; • Combinar: Juntar as duas metades em um ´unico conjunto j´a classificado. 1000 5000 10000 20000 30000 50000 Crescente 0.01566 0.03099 0.06233 0.13533 0.20800 0.36400 Decrescente 0.01033 0.03133 0.08833 0.13533 0.20799 0.36933 Aleat´orio 0.01033 0.03133 0.08333 0.14033 0.21333 0.37433 Table 4. Tabela de desempenho Merge sort O algoritmo merge sort possui complexidade Θ(n log n) para todos os casos. Como a estrat´egia do algoritmo consiste em dividir o problema em problemas menores
  • 6. Figure 4. Gr´afico de desempenho Merge sort at´e que a soluc¸˜ao seja trivial, o desempenho vai ser o mesmo independente do tipo de vetor, assim, os desempenhos dos trˆes tipos de vetores s˜ao bastante pr´oximos. Analisando o gr´afico e as tabelas percebe-se que o tempo de execuc¸˜ao mais lento no algoritmo merge sort que foi para um vetor aleat´orio de 50000 posic¸˜oes foi de 0.37 segundos, um tempo consideravelmente melhor em relac¸˜ao aos outros algoritmos j´a anal- isados at´e o momento. 3.5. Heap Sort Heap sort ´e um m´etodo de ordenac¸˜ao cujo princ´ıpio de funcionamento ´e o mesmo princ´ıpio utilizado para a ordenac¸˜ao por selec¸˜ao, a saber: selecione o menor item do vetor e a seguir troque-o com o item que est´a na primeira posic¸˜ao do vetor; repita estas duas operac¸˜oes com os n − 1 itens restantes, depois com os n − 2 itens, e assim suces- sivamente. O custo para encontrar o menor (ou o maior) item entre n itens custa n − 1 comparac¸˜oes. [Ziviani 2004] De acordo com [Ziviani 2004] o algoritmo heap sort possui complexidade O(n log n) independente da entrada. Esse ´e um limite superior, mas n˜ao ´e assintotica- mente restrito segundo [Cormen et al. ] que afirma que no melhor caso o desempenho ´e de Ω(n log n) em todas as situac¸˜oes. A execuc¸˜ao deste algoritmo de d´a da seguinte forma: • O primeiro passo ´e construir o heap a partir dos dados. • Depois disso s˜ao retirados os maiores valores da heap e colocados no novo array ordenado. Para esse primeiro elemento, ele deve ser a posic¸˜ao 0 do array.
  • 7. • O pr´oximo passo ´e a reconstruc¸˜ao do heap e a remoc¸˜ao do pr´oximo maior ele- mento e a inserc¸˜ao deste elemento no array ordenado. • Depois de removidos todos os elementos da heap, o array est´a ordenado. A direc¸˜ao dos elementos sorteados pode variar atrav´es da escolha do heap m´ınimo ou heap m´aximo no primeiro passo. Figure 5. Gr´afico de desempenho Heap sort 1000 5000 10000 20000 30000 50000 Crescente 0.02066 0.05733 0.10900 0.23900 0.37966 0.65533 Decrescente 0.01566 0.07300 0.11433 0.24966 0.36899 0.63433 Aleat´orio 0.01033 0.06233 0.11433 0.25466 0.36933 0.66566 Table 5. Tabela de desempenho Heap sort Apesar de o heap sort e o merge sort possu´ırem a mesma complexidade o algo- ritmo merge sort possui um desempenho um pouco melhor em relac¸˜ao ao heap sort. Por exemplo para qualquer tipo de vetor com 50000 elementos o algoritmo merge sort executa quase que na metade do tempo do heap sort. 3.6. Quick Sort O quick sort ´e um algoritmo de ordenac¸˜ao cujo tempo de execuc¸˜ao do pior caso ´e de Θ(n2 ) sobre um arranjo de entrada de n n´umeros. Apesar desse tempo de execuc¸˜ao lento no pior caso, o quick sort com frequˆencia ´e a melhor opc¸˜ao pr´atica para ordenac¸˜ao, devido a sua not´avel eficiˆencia na m´edia: seu tempo de execuc¸˜ao esperado ´e Θ(n lg n), e os fatores constantes ocultos na notac¸˜ao Θ(n lg n) s˜ao bastante pequenos. Ele tamb´em apresenta
  • 8. a vantagem da ordenac¸˜ao local e funciona bem at´e mesmo em ambientes de mem´oria virtual. [Cormen et al. ] Figure 6. Gr´afico de desempenho Quick sort 1000 5000 10000 20000 30000 50000 Crescente 0.01033 0.02066 0.03133 0.07266 0.08833 0.18699 Decrescente 0.0 0.01566 0.03133 0.06766 0.09366 0.19233 Aleat´orio 0.00533 0.02066 0.04133 0.07799 0.11966 0.21833 Table 6. Tabela de desempenho Quick sort O algoritmo quick sort ´e de longe o melhor algoritmo de ordenac¸˜ao existente, a sua execuc¸˜ao dura menos do que a metade do tempo em relac¸˜ao a qualquer outro algoritmo em qualquer outra condic¸˜ao. 4. Conclus˜ao Feitas todas as an´alises pode-se concluir que: • A relac¸˜ao Heap sort / Quick sort se mant´em constante para todos os tamanhos, sendo o Heap sort mais lento. • O algoritmo Insertion sort ´e o mais r´apido para qualquer tamanho se os elementos est˜ao ordenados e ´e o mais lento para qualquer tamanho se os elementos est˜ao em ordem decrescente. • Entre os algoritmos de complexidade O(n2 ), o insertion sort ´e melhor para todos os tamanhos aleat´orios experimentados.
  • 9. References Cormen, T. H., Leiserson, C. E., Rivest, R. L., and Stein, C. Algoritmos: Teoria e pr´atica. Campus, 2nd edition. Ziviani, N. (2004). Projeto de Algoritmos: com implementac¸˜oes em Pascal e C. Cengage Learning (Thomson / Pioneira), S˜ao Paulo, 1st edition.