Abstract.
An algorithm that orders a set, usually represented in a vector, is called the sort algorithm.
Algorithm of ordering in computer science is an algorithm that puts the elements of a given
sequence in a certain order in other words, makes its ordering complete or partial. The most used
orders are numeric and lexicographic. There are several reasons to order a sequence. One is the
possibility of accessing your data more efficiently. This study aims to evaluate, through
experimentation, the data generated using the ordering algorithms Bubble Sort, Insertion Sort,
Selection Sort, Merge Sort and Quick Sort, as well as their utilities and efficiencies.
Resumo.
Um algoritmo que ordena um conjunto, geralmente representada num vetor, é chamado de
algoritmo de ordenação. Algoritmo de ordenação em ciência da computação é um algoritmo que
coloca os elementos de uma dada sequência em uma certa ordem em outras palavras, efetua sua
ordenação completa ou parcial. As ordens mais usadas são a numérica e a lexicográfica. Existem
várias razões para se ordenar uma sequência. Uma delas é a possibilidade se acessar seus dados de
modo mais eficiente. Este estudo objetiva-se avaliar, por meio de experimentação, os dados gerados
com a utilização dos algoritmos de ordenação Bubble Sort, Insertion Sort, Selection Sort, Merge
Sort e Quick Sort, bem como, suas utilidades e eficiências.
1. Introdução
Este estudo objetiva-se em avaliar, por meio de experimentação, os dados gerados com a
utilização dos algoritmos de ordenação Bubble Sort, Insertion Sort, Selection Sort, Merge Sort,
Quick Sort, bem como, suas respectivas utilidades e eficiências. Para tanto, são executados três
testes com três vetores de tamanhos diferentes para cada algoritmo, utilizando como parâmetro o
número de comparações realizadas por cada algoritmo, no qual também será gerado um gráfico
contendo o numero médio. Apesar de ser possível a implementação dos algoritmos de ordenação
com qualquer estrutura linear, optamos por realizar os testes 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.
Podem ser encontrados trabalhos similares existem na literatura–(FOLATOR et al., 2014),
(HONORATO, 2013), (SILVA, 2010), (TELLES et al.,2015), (YANG et al., 2011) –, mas,estes não
relacionam os mesmos 5 algoritmos referidos neste artigo
Os vetores utilizados tem como tamanho 5, 10, e 50, gerando dentre eles 50 vetores inteiros
aleatoriamente, no qual serão avaliados pela ordenação de cada um dos dos métodos propostos e a
contagem do numero de comparações entre os elementos em cada ordenação realizada. Com os
resultados espera-se apontar as vantagens e desvantagens ao se fazer uso de um algoritmo em
detrimento de outro.
Os algoritmos de ordenação apresentados de forma breve terão como uso neste estudo seus
respectivos código em Linguagem C.
2. DESENVOLVIMENTO
O Bubble Sort é um dos algoritmos mais simples de ordenação, o qual, em linhas gerais,
funciona passando repetidamente por meio dos elementos a ser classificados, segue comparando
cada par dos elementos adjacentes e realiza a troca desses elementos caso estejam na ordem errada.
A verificação dos elementos a ser ordenados continua repetidamente até que não precise fazer mais
nenhuma troca. Isso indica que os elementos estão então ordenados
2.2. Insertion Sort
O Selection Sort utiliza um o conceito de "selecionar o elemento mais apto". Ele seleciona o
menor ou maior valor do vetor e passa para a primeira (ou última posição dependendo da ordem
requerida), depois o segundo menor para a segunda posição e assim sucessivamente com (n-1)
elementos restantes até os dois últimos.
2.4. Merge Sort
2.4.1 Dificuldades
Usamos as funções rand e srand para gerar os valores aleatórios (Figura 1). O rand gera uma
sequência de valores que se repete igual a si própria sempre que o programa é executado. Para que
esses valores aleatórios mudem em cada inicialização do programa, usamos o srand que muda os
valores de acordo com o relógio do sistema, em segundos.
2.5. Quick Sort
O Quick Sort usa do mesmo princípio de divisão que o Merge Sort, entretanto, o mesmo não
utiliza a intercalação, uma vez que não subdivide a dada estrutura em muitas menores. Esse
algoritmo simplesmente faz uso de um dos elementos da estrutura linear (determinada pelo
programador) como parâmetro inicial, denominado pivô. Com o pivô definido, o algoritmo irá
dividir a estrutura inicial em duas, a primeira, à esquerda, contendo todos os elementos de valores
menores que o pivô, e, à direita, todos os elementos com valores maiores. Em seguida, o mesmo
procedimento é realizado com o a primeira lista (valoresmenores<pivô<valoresmaiores). O mesmo
processo se repete até que todos os elementos estejam ordenados(SZWARCFITER e
MARKENZON, 2015.
3. RESULTADO E DISCUSSÕES
A Linguagem C foi definida como meio de codificação para a realização das simulações e a
IDE Code Blocks como ambiente de desenvolvimento. Quanto ao hardware, a máquina em que os
testes foram executados tem as seguintes configurações:
Usamos as funções rand e srand para gerar os valores aleatórios (Figura 1). O rand gera uma
sequência de valores que se repete igual a si própria sempre que o programa é executado. Para que
esses valores aleatórios mudem em cada inicialização do programa, usamos o srand que muda os
valores de acordo com o relógio do sistema, em segundos.
3.3 O que foi desenvolvido para que cada algoritmo ordenasse os mesmos vetores que os
demais:
Criamos um vetor global e uma função onde o vetor global copiava os elementos do vetor
local em suas respectivas posições antes de serem ordenadas, dessa forma o vetor poderia ser
ordenado e depois voltar ao seu estado original, apenas copiando os elementos do vetor global para
o vetor local novamente. Assim foi possível ordenar o mesmo vetor com os 5 métodos.
3.4 Teste de ordenação com vetor de 5 posições :
3.5 Teste de ordenação com vetor de 10 posições:
3.6 Teste de ordenação com vetor de 50 posições:
3.7 GRÁFICOS.
O algoritmo Bubble Sort, além de ser o de mais fácil implementação, não apresenta
resultados satisfatórios, principalmente no número de comparações. A ineficiência desse algoritmo
pode ser traduzida como um grande consumo de processamento, o que, para máquinas com poucos
(ou limitados) recursos computacionais, resulta em lentidão e longos períodos de espera. Sua
aplicação é, na opinião dos autores, indicada somente para fins educacionais, visto que um projeto
com o mesmo pode ser considerado ineficiente e/ou fraco (SILVA, 2010).
O Insertion Sort, por sua vez, é útil para estruturas lineares pequenas, geralmente entre 8 e
20 elementos, sendo amplamente utilizados em sequências de 10 elementos, tendo ainda, listas
ordenadas de forma decrescente como pior caso, listas em ordem crescente como o melhor caso e,
as demais ordens como sendo casos medianos. Sua principal vantagem é o pequeno número de
comparações, e, o excessivo número de trocas, sua desvantagem. Como exemplo de uso, tem-se a
ordenação de cartas de um baralho.
O Selection Sort torna-se útil em estruturas lineares similares ao do Insertion Sort, porém,
com o número de elementos consideravelmente maior, já que, o número de trocas é muito inferior
ao número de comparações, consumindo, assim, mais tempo de leitura e menos de escrita. A
vantagem de seu uso ocorre quando se trabalha com componentes em que, quanto mais se escreve,
ou reescreve, mais se desgasta, e, consequentemente, perdem sua eficiência, como é o caso das
memórias EEPROM e FLASH.
O algoritmo Quick Sort, ao subdividir o vetor e fazer inserções diretas utilizando um valor
de referência (pivô), reduz seu tempo de execução, mas, as quantidades de comparações (leitura) e,
principalmente, trocas (escrita) ainda são muito altas. Apesar disso, o Quick Sort se apresenta uma
boa opção para situações em que o objetivo é a execução em um menor tempo, mesmo que para
isso haja um detrimento em recursos computacionais de processamento.
O Shell Sort, baseado nos dados deste trabalho, é o que apresenta os resultados mais
satisfatórios, principalmente com estruturas maiores e desorganizadas. Por ser considerado uma
melhoria do Selection Sort, o Shell Sort, ao ser utilizado com as mesmas finalidades que seu
predecessor – recursos que demandem pouca escrita – irá apresentar um melhor desempenho, e,
consequentemente, expandir a vida útil dos recursos.
5. REFERÊNCIAS
https://www.kelvinsantiago.com.br/ordenacao-com-selection-sort-insertion-sort-bubble-sort-merge-
sort-quick-sort-heap-sort-em-java/
https://pt.wikibooks.org/wiki/Algoritmos_e_Estruturas_de_Dados/Algoritmos_de_Ordena
%C3%A7%C3%A3o