Você está na página 1de 13

1

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Douglas Leonard Viebrantz

Lucas Passos Eusebio

Roger Adce Nakamura

Comparação de algoritmos de ordenação

Medianeira - PR

2023

Dois mil e vinte e três


2

Resumo

Este trabalho foi feito com o intuito de comparar diferentes tipos de


algoritmos de ordenação de dados para analisarmos a eficiência de cada algoritmo
em diferentes situações, a forma que analisamos foi através do tempo, que
verificamos o tempo necessário para o mesmo completar sua execução em listas de
tamanhos diferentes, possuindo tamanhos de 500 mil, 750 mil e 1 milhão, a forma
organizada através de lista ordenada, invertida e de forma aleatória. Após a coleta
das informações, foram apresentadas em forma de tabelas e gráficos, onde foi
realizada uma análise e uma conclusão com base nos resultados obtidos.
3

SUMÁRIO

1 Introdução…………………………………………………………………………...5

1.1 Objetivo do trabalho................................................................................... ..5

1.2 Importância da Ordenação em Computação............................................. ..5

2 Materiais e métodos.......................................................................... ………..6

2.1 Algoritmos de Ordenação Implementados................................................ ..6

2.1.1 Selection Sort............................................................................................... ..6

2.1.2 Bubble Sort…………………………............................................................... ..6

2.1.3 Insert Sort……….......................................................................................... ..6

2.1.4 QuickSort de Hoare…................................................................................. ..7

2.1.5 QuickSort de Lomuto………........................................................................ ..7

2.1.6 Merge Sort................................................................................................... …7

2.1.7 Radix Sort................................................................................................... …7

2.1.8 Heap Sort.................................................................................................... …7

2.2 Geração de Conjunto de Dados.............................................................. …8

2.3 Metodologia de Medição do Tempo de Execução................................. …8

2.4 Ambiente de Testes................................................................................... …9

3 RESULTADOS E DISCUSSÕES............................................................... …10

3.1 Gráfico Geral................................................................................................ 11

3.2 Gráfico dos Mais Efetivos....................................................................... …12


4

4 CONSIDERAÇÕES FINAIS………............................................................ …13


5

1 INTRODUÇÃO

A ordenação de dados é um dos problemas fundamentais da ciência da


computação. A capacidade de organizar informações de forma eficiente é essencial
para uma variedade de aplicações, desde sistemas de gerenciamento de banco de
dados até algoritmos de busca. Neste trabalho, exploraremos uma análise
aprofundada dos algoritmos de ordenação, visando compreender seu desempenho
em diferentes cenários e fornecer orientações práticas para a escolha do algoritmo
mais apropriado em situações específicas.

1.1 Objetivo do trabalho

O objetivo primordial deste trabalho é realizar uma investigação minuciosa


dos algoritmos de ordenação, comparando-os em termos de desempenho e
identificando suas vantagens e desvantagens em diferentes contextos. Além disso,
buscamos estabelecer diretrizes práticas para a seleção do algoritmo mais eficaz
em cenários específicos.

1.2 Importância da Ordenação em Computação:

A ordenação desempenha um papel crítico na computação, impactando uma


ampla variedade de sistemas e aplicativos. A capacidade de classificar dados de
maneira eficiente influencia diretamente o desempenho de algoritmos de busca,
sistemas de gerenciamento de banco de dados, e-commerce, processamento de
grandes volumes de dados e muito mais. Compreender a importância da ordenação
é fundamental para otimizar a eficiência computacional em inúmeras aplicações.
6

2 MATERIAIS E MÉTODOS

Será apresentado a estrutura metodológica e os recursos empregados na


condução da análise comparativa de algoritmos de ordenação. Descrevemos a
seleção e implementação dos algoritmos, a geração dos conjuntos de dados para
testes, a metodologia utilizada para medir o tempo de execução, o ambiente de
testes, a coleta de dados, a análise estatística, as ferramentas de análise de dados
e considerações éticas. Além disso, reconhecemos as limitações do estudo que
podem impactar os resultados. Esta seção fornece uma visão geral do enfoque e
dos métodos adotados na pesquisa.

2.1 Algoritmos de Ordenação Implementados:

Para a realização deste estudo, implementamos na linguagem C, uma


seleção de algoritmos de ordenação amplamente utilizados. Cada algoritmo
representa uma abordagem distinta para resolver o problema de ordenação,
variando em termos de complexidade, eficiência e aplicabilidade. Abaixo estão os
algoritmos escolhidos, com descrições detalhadas de cada um:

2.1.1 Selection Sort

O Selection Sort é um algoritmo de ordenação direta que opera encontrando


repetidamente o menor elemento da lista e movendo-o para a posição correta. É
uma abordagem simples, mas seu desempenho é limitado em conjuntos de dados
muito grandes devido à sua complexidade O(n²).

2.1.2 Bubble Sort

O Bubble Sort compara elementos adjacentes e os troca se estiverem fora de


ordem. Esse processo de comparação e troca é repetido até que a lista esteja
completamente ordenada. No entanto, o Bubble Sort é conhecido por sua
ineficiência, especialmente em grandes conjuntos de dados.

2.1.3 Insert Sort

O Insertion Sort é um algoritmo eficaz para conjuntos de dados pequenos.


Ele percorre a lista e, para cada elemento, o insere na posição correta em relação
7

aos elementos já ordenados. No entanto, seu desempenho decai rapidamente em


conjuntos de dados maiores.

2.1.4 QuickSort de Hoare

O QuickSort é um algoritmo "dividir e conquistar" que divide a lista em


subconjuntos menores, ordena esses subconjuntos e, em seguida, os combina. O
QuickSort de Hoare é uma variação do QuickSort que difere na escolha do pivô e na
partição dos elementos. O pivô é frequentemente o elemento do meio, e a partição
começa dos extremos da lista, convergindo para o meio. Isso torna o QuickSort de
Hoare eficiente, especialmente com muitos elementos duplicados.

2.1.5 QuickSort de Lomuto

O QuickSort de Lomuto é outra variação do QuickSort que escolhe o pivô


como o último elemento da lista e realiza a partição de forma diferente. Ele é mais
simples de implementar, mas pode ser menos eficiente em alguns casos.

2.1.6 Merge Sort

O Merge Sort é um algoritmo de ordenação "dividir e conquistar" que divide a


lista em duas metades, ordena cada metade e, em seguida, combina as duas
metades de maneira ordenada. É conhecido por sua eficiência e estabilidade,
tornando-o uma escolha popular em muitas aplicações.

2.1.7 Radix Sort

O Radix Sort é outro algoritmo de ordenação por distribuição que ordena os


elementos com base em seus dígitos individuais. Isso o torna particularmente
adequado para ordenar números inteiros com diferentes tamanhos de dígitos.

2.1.8 Heap Sort

O Heapsort transforma a lista em uma estrutura de heap, onde o maior


elemento é a raiz. Ele extrai repetidamente o maior elemento, resultando na
ordenação da lista. Embora tenha uma complexidade de tempo garantida O(n log n),
8

o Heapsort é menos eficiente na prática do que o QuickSort e o Merge Sort em


muitos casos.

2.2 Geração de Conjunto de Dados

Para avaliar o desempenho dos algoritmos, foram gerados conjuntos de


dados de diferentes tamanhos: 500.000, 750.000 e 1.000.000 de elementos. Essa
diversidade de conjuntos de dados permite a análise de desempenho sob diferentes
cenários de entrada. Cada conjunto de dados foi projetado com os seguintes tipos
de elementos:

2.2.1 Aleatórios

Os elementos foram gerados aleatoriamente, representando um cenário


típico de entrada desordenada.

2.2.2 Ordenados em Ordem Crescente

Os elementos foram organizados em ordem crescente, representando um


cenário no qual os dados já estão parcialmente ordenados.

2.2.3 Ordenados em Ordem Decrescente

Os elementos foram organizados em ordem decrescente, representando um


cenário inverso ao anterior.

2.3 Metodologia de Medição do Tempo de Execução:

A medição precisa do tempo de execução é essencial para a análise


comparativa. Para isso, utilizamos bibliotecas e funções de temporização
disponíveis na linguagem de programação C na qual os algoritmos foram
implementados.

A metodologia de medição incluiu a execução dos algoritmos em cada


conjunto de dados de teste. Cada algoritmo foi executado cinco vezes e os tempos
foram registrados para cálculo de médias e desvios padrão. A média do tempo de
execução foi usada como principal métrica de desempenho.
9

2.4 Ambiente de Testes:

Os testes foram realizados em um ambiente controlado para garantir


resultados confiáveis. O ambiente de teste foi configurado para evitar a interferência
de processos concorrentes que pudessem afetar os resultados. O ambiente de
testes consistiu em um computador com as seguintes especificações:

Processador: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz (4 CPUs), ~2,7GHz;

Memória RAM: 6144 MB RAM;

Sistema Operacional: Windows 10 Home 64 bits;

Navegador: Google Chrome;

Site: www.replit.com.
10

3 RESULTADOS E DISCUSSÕES

Essa etapa cobre sobre como a análise de algoritmos de ordenação foi


preparada. Abaixo, existem três tabelas onde apresentam os resultados obtidos,
através dos algoritmos. Para cada quantidade e ordenação específica, os códigos
foram executados cinco vezes, e seus valores de tempo retornados em segundos,
foram salvos em um excel, que após completo foi feito uma média, assim chegando
nos valores das seguintes tabelas:

Tabela 1: Médias para um vetor ordenado crescente(segundos).

ORDENADOS

500.000 750.000 1.000.000


Select Sort 86,94735 193,05940 349,84199
Bubble Sort 69,32754 155,35138 382,91080
Insert Sort 0,00087 0,00432 0,00760
Quick Sort(Hoare) 0,00867 0,01320 0,01737
Quick
0,45045 0,63251
Sort(Lomuto) 0,34419
MergeSort 0,04097 0,05400 0,05521
RadixSort 0,06679 0,10213 0,15638
HeapSort 0,04100 0,06667 0,08624

Tabela 2: Médias para um vetor ordenado invertido(segundos).

INVERTIDOS
500.000 750.000 1.000.000
Select Sort 88,41409 173,89994 350,29071
Bubble Sort 137,19209 303,04602 476,88516
Insert Sort 74,78209 163,51685 912,85359
Quick Sort(Hoare) 0,00888 0,01394 0,01941
Quick
Sort(Lomuto) 0,09522 0,38168 0,49298
MergeSort 0,03309 0,04909 0,06309
RadixSort 0,06737 0,09946 0,15756
11

HeapSort 0,04470 0,07028 0,10013

Tabela 3: Médias para um vetor randômico(segundos).

RANDÔMICO
500.000 750.000 1.000.000
Select Sort 103,66181 163,68735 287,29196
Bubble Sort 392,46160 877,88520 1.534,59253
Insert Sort 62,56809 139,92101 241,12921
Quick Sort(Hoare) 0,04952 0,07972 0,10951
Quick
0,06125 0,09927 0,12111
Sort(Lomuto)
MergeSort 0,08753 0,13591 0,17983
RadixSort 0,06679 0,09925 0,13452
HeapSort 0,08968 0,15052 0,20942

3.1 Gráfico Geral

A seguir será apresentado um gráfico, onde todos os algoritmos são


tabelados em um “confronto direto”, assim sendo de fácil análise, qual possui mais
eficiência e qual possui menor eficiência em cada situação proposta.

No gráfico, o eixo x está identificando cada tipo de dados está ordenado e


suas devidas quantidades, e no eixo y, está identificando o tempo em segundos que
cada algoritmo levou para efetuar seus testes nos devidos problemas propostos..
12

3.2 Gráfico dos Mais Efetivos

Abaixo no gráfico, está apresentado os quatro algoritmos que tiveram


melhores resultados em cada desafio de ordenação proposto. Dessa forma
conseguimos identificar que mesmo entre os melhores desempenhos, cada método
ainda assim possui seus prós e contras.
13

4 CONSIDERAÇÕES FINAIS

Após uma análise abrangente dos algoritmos de ordenação implementados,


é evidente que o desempenho varia significativamente em diferentes cenários.
Algoritmos como o Merge Sort e o QuickSort de Hoare destacaram-se em termos de
eficiência e estabilidade, enquanto o Bubble Sort e o Selection Sort mostraram
desempenho mais limitado. A escolha do algoritmo ideal depende das
características dos dados e das demandas específicas da aplicação. Este estudo
fornece uma base sólida para a seleção informada de algoritmos de ordenação,
considerando fatores como tamanho do conjunto de dados, distribuição dos
elementos e recursos disponíveis.

Você também pode gostar