Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

UNIP – UNIVERSIDADE PAULISTA 
Curso de Ciência da Computação 
 
 
 
 
 
 
 
 
ATIVIDADES PRÁTICAS SUPERVISONADAS - APS 
 
Algoritmos de Ordenação 
 
 
 
Daniel Ferreira da Silva - RA – D11CFD2 
 
 
 
 
 
São José dos Campos, 30 de maio de 2022. 
 
 
 
UNIP – UNIVERSIDADE PAULISTA 
Curso de Ciência da Computação 
 
 
 
 
 
 
 
 
ATIVIDADES PRÁTICAS SUPERVISONADAS - APS 
Curso de Ciência da Computação 
 
 
 
 
 
 
 
 
 
Atividades Práticas Supervisionadas do 
2º Semestres do Curso de Ciência da 
Computação da Universidade 
Paulista – UNIP. 
 
Coordenador: Prof. Fernando A. Gotti 
 
 
 
 
São José dos Campos, 30 de maio de 2022 
RESUMO 
Esse trabalho tem como objetivo demonstrar alguns dos métodos de 
ordenação mais conhecidos, BubbleSort, SelectionSort e InsertSort; demonstrar 
como funcionam e seus principais pontos positivos e negativos como desempenho e 
limitações. 
Palavras-chave: Ordenação, BubbleSort, SelectionSort, InsertSort. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ABSTRACT 
This work aims to demonstrate some of the methods of Most popular sorting, 
BubbleSort, SelectionSort and InsertSort; demonstrate how they work and their main 
strengths and weaknesses such as performance and limitations. 
 
Keywords: Sorting, BubbleSort, SelectionSort, InsertSort.. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SUMÁRIO 
1. INTRODUÇÃO .................................................................................................. 6 
2. REFERENCIAL TEÓRICO ............................................................................... 7 
3. DESENVOLVIMENTO .................................................................................... 10 
4. RESULTADO .................................................................................................. 12 
5. CONCLUSÃO ................................................................................................. 13 
7. REFERÊNCIAS BIBLIOGRÁFICAS ................................................................. 14 
APÊNDICE. ........................................................................................................... 15 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1. INTRODUÇÃO 
 
De acordo com o prof. Dr. Os métodos de ordenação de João Luís Garcia Rosa 
(2011) destinam-se a simplificar, de forma mais rápida e económica a procura de 
informação específica num grande conjunto de informação. 
Algoritmos de ordenação em ciência da computação são algoritmos que 
colocam os elementos de uma determinada sequência em uma determinada ordem, 
ou seja, realizam uma ordenação total ou parcial sobre eles. Existem várias razões 
para ordenar uma sequência. Uma delas é o acesso mais eficiente aos seus dados. 
Reinaldo Fortes (2014) destaca o fato de que nenhum método é considerado 
universalmente superior a todos os outros. É necessário analisar o problema e, com 
base nas características dos dados, decidir qual o método mais adequado para ele. 
De acordo com o ebook Estruturas de Dados Usando C (1995) aspectos de 
medida de eficiência: tempo para codificação do programa de ordenação tempo de 
máquina para a execução do programa; espaço de memória necessário. 
Normalmente, o tempo gasto é medido pelo número de operações que são críticas 
para o programa que está sendo executado. Neste caso dos métodos de ordenação, 
as principais operações são: comparação; movimentação dos elementos da lista ou 
troca de posições. Medido analisando o melhor caso, o pior caso e o caso médio. O 
resultado é uma fórmula em função de n (número de registros no arquivo). 
No artigo Algoritmos de ordenação: análise e comparação (2013) no site da 
DEVMIDIA, o método BubbleSort é considerado o mais intuitivo e fácil de 
implementar, mas o menos eficiente. SelectSort Neste tipo de classificação, 
seleciona o menor elemento de um subvetor não classificado e o substitui pelo 
primeiro elemento desse subvetor. Insertsort é um algoritmo de ordenação 
ligeiramente diferente dos outros dois. 
 
 
 
 
2. REFERENCIAL TEÓRICO 
 
2.1. BubbleSort 
O método Bubblesort executa várias iterações na lista. Ele compara itens da lista 
com o item a sua direita executando a troca da posição quando necessário. De 
maneira geral a cada passagem da lista sempre o elemento de maior valor 
desordenada é colocado em sua posição correta. Essencialmente, cada item se 
move como uma “bolha” “subindo para posição correta” (MILLER; RANUM, 2013). 
A Figura 1 mostra a primeira interação. Itens sombreados são os itens que estão 
sendo comparados para ver se estão fora de ordem. Se houver n itens na lista, 
haverá n-1 pares de itens que precisam ser comparados na primeira iteração. Pode-
se observar que quando o valor mais alto da lista é comparado, ele é continuamente 
empurrado para o final da lista (MILLER; RANUM, 2013). 
 
Figura 1 – Exemplo de aplicação do algoritmo de ordenação BubleSort 
 
FONTE: (Panda, 2022) 
 
2.2. SelecSort 
Pode se dizer que o SelectionSort é uma melhora do BubbleSort por realizar 
uma troca a cada interação pela lista. O SelectionSort procura pelo valor mais alto 
enquanto faz uma interação e, depois de completá-la, coloca-o na posição correta. 
Assim como o BubbleSort, depois da primeira interação, o maior item sempre está 
na posição correta. Depois da segunda interação, o próximo maior item também vai 
para a posição adequada. O processo continua dessa forma até o penúltimo item, já 
que o item final deverá estar no lugar certo depois da penúltima interação (MILLER; 
RANUM 2013); como demostrado na Figura 2. 
Figura 2 - Exemplo de aplicação do algoritmo de ordenação SelectSort 
 
FONTE: (Panda, 2022) 
2.3. InsertSort 
InsertSort é diferente dos demais métodos citados. Ele cria uma lista no final da 
lista original, na qual irá servir de suporte onde serão inseridos os elementos 
ordenados. Cada item da lista original é comparado com os elementos da lista 
ordenada e inserido em sua posição correta na lista ordenada. A Figura 3 mostra a 
execução do InsertSort. Os elementos mais escuros pertencem a lista de suporte 
com os elementos ordenados cada passagem (MILLER; RANUM 2013). 
 
Figura 3 - Exemplo de aplicação do algoritmo de ordenação InsertSort 
 
FONTE: (Panda, 2022) 
Apensar do número de comparações para o InsertSort ser o mesmo que para o 
BubbleSort e SelectSort n−1, a operação realizada na ordenação dos elementos é a 
inserção do valor na lista, processo que requer menos processamento em 
comparação a troca de valores, método utilizado pelo BubbleSort e SelectSort. Com 
relação a desempenho, o InsertSort mostra melhores resultados (MILLER; RANUM, 
2013). 
3. DESENVOLVIMENTO 
 
3.1. Leitura dos dados 
Para teste dos algoritmos foi solicitado a ordenação de conjunto de dados 
armazenados em txt, sendo eles de 1000, 5000 e 10000 elementos, para leitura do 
dos arquivos e armazenamento em uma lista foi utilizado o método loadtxt da 
biblioteca Numpy como mostrado na Figura 4. 
 
Figura 4 - Trecho do código que efetua a leitura do conjunto de dados utilizados para 
comparação dos algoritmos 
 
Fonte: Autoria Própria 
3.2. BubbleSort 
O método BubbleSort recebe a lista carregada com os dados do txt e se inicia 
com a tomada o momento do início da execução; posteriormente utilizado para 
medição da performance do algoritmo e a definição de algumas classes necessárias, 
em seguida da inicio ao laço de repetição “while” onde há a implementação da lógica 
do algoritmo, após o termino do laço de repetição há a tomada do momento de 
finalização da ordenação, em seguida é salvo a lista ordenada em um txt de saída e 
o método se encerra retornando o tempo de execução da ordenação da lista. A 
implementação do método está ilustrada na Figura 5. 
 
Figura 5 - Trecho do código correspondente ao algoritmo BubbleSort 
 
Fonte: Autoria Própria 
 
3.3. SelectionSortO método SelectionSort segue o mesmo modelo de início e fim que o 
implementado no BubbleSort, a implementação da logica do método tem início no 
laço de repetição “for”. A implementação do método está ilustrada na Figura 6. 
 
Figura 6 - Trecho do código correspondente ao algoritmo SelectionSort 
 
Fonte: Autoria Própria 
 
3.4. InsertSort 
A implementação do método está ilustrada na Figura 7. 
 
Figura 7 - Trecho do código correspondente ao algoritmo InsertSort 
 
Fonte: Autoria Própria 
4. RESULTADO 
 
4.1. Comparação do tempo de execução. 
Tabela 1 - Tempo de execução ms 
Algoritmo 1000_numbers.txt 5000_numbers.txt 10000_numbers.txt
BubbleSort 247 6268 25025
SelectionSort 125 3192 12784
InserSort 0 2 5 
Fonte: Autoria Própria 
Figura 8 - Gráfico comparativo 
 
Fonte: Autoria Própria 
 
O BubbleSort obteve de longe o pior desempenho em todos os conjuntos de 
dados, demorando o dobro do tempo em comparação ao SelectSort, e o tempo de 
execução tanto do BubbleSort como SelectionSort aumentaram de forma 
exponencial, conforme o número de elemento aumenta no conjunto de dados, ao 
contrário do InsertSort que apresentou de longe o melhor desempenho e o aumento 
do tempo de execução ocorreu de forma linear conforme o número de elementos 
aumentava. 
 
 
5. Conclusão 
 
No trabalho foi apresentado alguns dos métodos de ordenação mais conhecidos, 
foi explicado como funcionam, seus desempenhos e foram também aplicados na 
prática em uma aplicação. Em relação aos desempenhos dos métodos, o InsetSort 
foi o algoritmo mais eficiente nos conjuntos de dados utilizados. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7. REFERÊNCIAS BIBLIOGRÁFICAS 
 
8 Algoritmos de Ordenação | Uma Introdução à Programação Disponível em: < 
https://bookdown.org/jessicakubrusly/programacao-estatistica/algoritmos-de-
ordenacao.html> Acesso em: 01 abr. 2022. 
Aaron Ai Tenenbaum, Yedidyah Langsam, Moshe J. Augenstein, 2013. 
“Estrutura de Dados I“. Disponível em: 
https://www.cin.ufpe.br/~garme/public/(ebook)Estruturas%20de%20Dados%20Usan
do%20C%20(Tenenbaum).pdf . Acesso em 30 de maio de 2022. 
Algoritmos de ordenação: análise e comparação, 2013. Disponível em: < 
https://www.devmedia.com.br/algoritmos-de-ordenacao-analise-e-
comparacao/28261>. Acesso em: 01 abr. 2022. 
FORTES, Prof. Reinaldo 2013. UFOP. “Estrutura de Dados I“. Disponível em: 
http://www.decom.ufop.br/reinaldo/site_media/uploads/2013-02-bcc202/aula_12_-
_bubblesort-selectionsort-insertionsort_(v1).pdf. Acesso em 30 de maio de 2022. 
GARCIA ROSA, Prof. Dr. João Luís 2011. USP. “Métodos de Ordenação “. 
Disponível em: http://wiki.icmc.usp.br/images/b/b3/SCC501Cap4.pdf . Acesso em 30 
de maio de 2022. 
https://bookdown.org/jessicakubrusly/programacao-estatistica/algoritmos-de-ordenacao.html
https://bookdown.org/jessicakubrusly/programacao-estatistica/algoritmos-de-ordenacao.html
https://www.cin.ufpe.br/~garme/public/(ebook)Estruturas%20de%20Dados%20Usando%20C%20(Tenenbaum).pdf
https://www.cin.ufpe.br/~garme/public/(ebook)Estruturas%20de%20Dados%20Usando%20C%20(Tenenbaum).pdf
https://www.devmedia.com.br/algoritmos-de-ordenacao-analise-e-comparacao/28261
https://www.devmedia.com.br/algoritmos-de-ordenacao-analise-e-comparacao/28261
http://www.decom.ufop.br/reinaldo/site_media/uploads/2013-02-bcc202/aula_12_-_bubblesort-selectionsort-insertionsort_(v1).pdf
http://www.decom.ufop.br/reinaldo/site_media/uploads/2013-02-bcc202/aula_12_-_bubblesort-selectionsort-insertionsort_(v1).pdf
http://wiki.icmc.usp.br/images/b/b3/SCC501Cap4.pdf
MILLER; RANUM, Brad e David, 2013. Problem Solving with Algorithms and Data 
Structures using Python. Disponível em: < 
https://runestone.academy/ns/books/published/pythonds/index.html l> . Acesso em: 
01 abr. 2022. 
 
 
APÊNDICE. 
 
import time 
from tkinter import N 
import numpy 
 
def BubbleSort(list): 
 init = time.time() 
 trocas = True 
 passo = len(list)-1 
 while passo > 0 and trocas: 
 trocas = False 
 for i in range(passo): 
 if list[i]>list[i+1]: 
 trocas = True 
 temp = list[i] 
 list[i] = list[i+1] 
 list[i+1] = temp 
 passo = passo-1 
 fimt = time.time() 
 txtsaida = open("lista_BoubbleSort.txt","w") 
 
 for d in list: 
 txtsaida.write(f"{d}\n") 
 return fimt-init 
 
def SelectionSort(list): 
 init = time.time() 
 for prencher in range(len(list)-1,0,-1): 
 pMax=0 
 for local in range(1,prencher+1): 
 if list[local]>list[pMax]: 
 pMax = local 
 
 temp = list[prencher] 
 list[prencher] = list[pMax] 
 list[pMax] = temp 
 fimt = time.time() 
 txtsaida = open("lista_SelectionSort.txt","w") 
 for d in list: 
 txtsaida.write(f"{d}\n") 
 return fimt-init 
 
 
 
 
def InsertionSort(list): 
 init = time.time() 
 
 for ind in range(1,len(list)): 
 valoratual = list[ind] 
 posicao = ind 
 
 while posicao>0 and list[posicao-1]>valoratual: 
 list[posicao]=list[posicao-1] 
 posicao = posicao-1 
 list[posicao]=valoratual 
 
 fimt = time.time() 
 txtsaida = open("lista_InsertionSort.txt","w") 
 for d in list: 
 txtsaida.write(f"{d}\n") 
 return fimt-init 
 
 
list= numpy.loadtxt("10000_numbers.txt") 
print("Tempo de execução BubbleSort: ",BubbleSort(list),"\n") 
print("Tempo de execução SelectionSort: ",SelectionSort(list),"\n") 
print("Tempo de execução InsertionSort: ",InsertionSort(list))

Mais conteúdos dessa disciplina