Escolar Documentos
Profissional Documentos
Cultura Documentos
Abstract. With the exponential growth of the amount of data, retrieving a spe-
cific data has become an increasingly frequent problem. Therefore, the use
of ordering algorithms becomes essential to organize a given linear structure,
whether physical or not. This work describes a brief comparative study on the
main algorithms of ordering and their respective efficiencies. For this, an expe-
rimental study is performed through the JAVA language simulation to obtain the
main metrics that validate the efficiency of the algorithms.
1. Introdução
Este estudo visa realizar um comparativo entre os resultados obtidos na aplicação dos al-
goritmos de ordenação Bubble Sort, Insertion Sort, Selection Sort, Binary Insertion Sort,
Merge Sort, Quick Sort, Heap Sort e Bucket Sort, bem como, suas respectivas utilidades e
eficiências. Para realizar essa análise, foi realizado um teste com três vetores de tamanhos
diferentes para cada algoritmo e, os dados coletados foram comparados. Os testes foram
realizados apenas com algarismos numéricos inteiros (sequências de números) a fim de
obtermos dados quantitativos que facilitem o entendimento da análise posterior.
2. Algoritmos de Ordenação
Os métodos de ordenação constituem em artifı́cios para a resolução de tarefas utilizando
computadores. As técnicas de ordenação permitem verificar como cada algoritmo se com-
porta quando executado. Dependendo da aplicação, cada algoritmo considerado possui
uma vantagem particular sobre os outros algoritmos.
Nesse contexto, os algoritmos de ordenação são algoritmos que direcionam para
a organização ou reordenação de valores apresentados em uma dada sequência, ou seja,
consistem no processo de rearranjar um conjunto de objetos em ordem ascendente ou
descendente. A ordenação visa facilitar a recuperação posterior de itens do conjunto
ordenado de forma mais eficiente.
2.1. BubbleSort
2.2. InsertionSort
É um método simples que consiste em partir de uma parcela dos elementos a serem orde-
nados e que a cada interação vai caminhando para organizar uma parcela maior da lista e
que somente na última interação é que analisará a lista como um todo.
Segundo [Júnior 2014], como principais aspectos negativos desse algoritmo cabe
registrar que:
• o fato do arquivo já estar ordenado não ajuda em nada, pois o custo continua
quadrático;
• o algoritmo não é estável, pois ele nem sempre deixa os registros com chaves
iguais na mesma posição relativa.
2.3. SelectionSort
2.4. BinaryInsertioSort
Este algoritmo é uma variação do Insertion Sort, na qual o local apropriado para inserir
o elemento selecionado é encontrado usando a pesquisa binária. A utilização da pesquisa
binária auxilia na redução do número de comparações obtidas pelo Insertion Sort. Deste
modo, exigindo menos custo computacional e um menor tempo para execução.
2.5. QuickSort
Este algoritmo tem como objetivo a reordenação de uma estrutura linear por meio da
quebra, intercalação e união dos n elementos existentes, ou seja, a estrutura a ser re-
ordenada será, de forma recursiva, subdividida em estruturas menores até que não seja
mais possı́vel fazê-lo. Logo em seguida, os elementos serão organizados de modo
que cada subestrutura ficará ordenada. Feito isso, as subestruturas menores (agora
ordenadas) serão unidas, sendo seus elementos ordenados por meio de intercalação
[Szwarcfiter and Markenzon 1994]. O mesmo processo repete-se até que todos os ele-
mentos estejam unidos em uma única estrutura organizada.
2.7. HeapSort
2.8. BucketSort
3. Metodologia
A Linguagem Java foi definida como meio de codificação para a realização dos testes e
a IDE NetBeans como ambiente de desenvolvimento. Adicionalmente, desenvolveu-se
uma interface gráfica (JFrame) na IDE para melhor compreensão e análise dos resultados
obtidos em cada algoritmo. Quanto ao hardware, a máquina em que os testes foram
executados tem as seguintes configurações:
• Fabricante: Dell;
• Modelo: Inspiron 15 Série 3000;
• Processador: Intel(R) Core(TM) i5-7200U;
• Frequência: 2,5 GHz;
• Memória RAM: 4,00 GB (DDR4 2.400MHz);
• Sistema Operacional: Windows 10 Home Single Language (64 bits).
3.1. Testes
Após codificação dos algoritmos, foram utilizados como entrada vetores aleatórios, sendo
copiados para os códigos a partir de 3 arquivos com extensão .txt, a fim de garantir que
os mesmos valores fossem utilizados em todas as medidas. O comprimento dos vetores
foram: 5000, 10000 e 20000 elementos. Ademais, verificou-se o tempo de execução para
todos os métodos, utilizando cada comprimento como entrada.
4.1. BubbleSort
4.2. InsertionSort
4.3. SelectionSort
4.4. BinaryInsertioSort
4.5. QuickSort
Ao rearranjar os dados de modo que as dados ”menores”precedam os dados ”maiores”e
em seguida ordenar as duas sublistas de dados menores e maiores recursivamente até que a
lista completa se encontre ordenada, obtém-se como resultado um baixo número de trocas
e comparações, além de um valor ı́nfimo para o tempo de execução. Tal situação, pode
ser confirmada na figura 5, onde é demonstrando a quantidade de comparações, trocas e
o tempo de execução deste para cada vetor.
4.6. MergeSort
O seu funcionamento é similar ao Quick Sort, no entanto, para o pior caso (dados de-
sordenados) e para um grande quantidade de dados, o mesmo se sobressai ao apresen-
tar uma complexidade n log n. Conforme figura 6, através da análise da quantidade de
comparações, trocas e o tempo de execução obtidos para cada vetor é possı́vel perceber a
diferença com o algoritmo Quick Sort.
(a) Quantidade de comparações e trocas (b) Tempo de execução
4.7. HeapSort
O grande diferencial do Heap Sort é que apresenta um desempenho em tempo de execução
muito bom em conjuntos ordenados aleatoriamente e o no pior cenário é praticamente
igual ao desempenho em cenário médio. Conforme figura 7, é possı́vel identificar, com os
resultados obtidos, um desempenho superior aos algoritmos Bubble Sort, Insertion Sort,
Binary Insertion Sort e Selection Sort.
4.8. BucketSort
A partir da divisão de um vetor em um número finito de recipientes (baldes). Onde cada
recipiente é então ordenado individualmente, usando um algoritmo de ordenação dife-
rente, neste estudo foi utilizado o Insertion Sort, ou usando o algoritmo bucket sort recur-
sivamente. É garantido ao algoritmo uma complexidade linear Θ (n), reduzindo a quanti-
dade de trocas, comparações e tempo de execução consideravelmente conforme exposto
na figura 8.
(a) Quantidade de comparações e trocas (b) Tempo de execução
5. Conclusões
É possı́vel identificar que o comportamento dos métodos de ordenação varia conforme o
tamanho de entrada, onde a eficiência dos métodos está relacionada ao tempo de execução,
ao número de comparações e também a quantidade de trocas a serem efetuadas. Os al-
goritmos estudados foram implementados e executados para uma sequência de listas de
tamanho variado, iniciando com 5000 e chegando a 20000 elementos na lista maior. A
relação entre os tempos de execução estão apresentados na figura a seguir.
Referências
Júnior, C. D. d. F., Alencar, F., and Júnior, W. M. P. (2014). Métodos de ordenação: a
importância da escolha do método correto. Intercursos revista cientı́fica, 13.
Júnior, W. M. P. (2014). Análise de algoritmos.
Pereira, S. D. L. (2018). Algoritmos e Lógica de Programação em C–Uma Abordagem
Didática. Editora Saraiva.
Szwarcfiter, J. L. and Markenzon, L. (1994). Estruturas de Dados e seus Algoritmos,
volume 2. Livros Técnicos e Cientı́ficos.
Ziviani, N. (2007). Projeto de algoritmos com implementação e c++ e java. THOMPSON
Learning, São Paulo, 1st edição.