Escolar Documentos
Profissional Documentos
Cultura Documentos
Santana de Parnaíba – SP
2017
ATIVIDADES PRÁTICAS SUPERVISIONADAS (APS):
Desenvolvimento de sistema para análise de performance de algoritmos de
ordenação de dados
Santana de Parnaíba – SP
2017
ATIVIDADES PRÁTICAS SUPERVISIONADAS (APS):
Desenvolvimento de sistema para análise de performance de algoritmos de
ordenação de dados
Aprovado em __/__/__
BANCA EXAMINADORA
SUMÁRIO
1 INTRODUÇÃO...........................................................................................................................5
2 ALGORITMO DE ORDENAÇÃO POR TROCA....................................................................6
2.1 BubbleSort..............................................................................................................................6
2.2 QuickSort................................................................................................................................8
3.1 InsertionSort.........................................................................................................................11
6 Conclusão.................................................................................................................................21
7 BIBLIOGRAFIA........................................................................................................................22
1 INTRODUÇÃO
Este trabalho tem como objetivo visar entre as diversas estruturas de dados,
vamos discutir seu armazenamento, algoritmos e métodos de aplicabilidade
Considerada uma estrutura de dados não primitiva, a lista linear permite
representar um conjunto de dados que se relacionam entre si. Construindo
informações, das quais podemos buscar, incluir, remover, alterar e ate
combinar duas ou mais listas de um determinado elemento.
Consideradas como básicas, é preciso saber qual utilizar para obter um
desempenho melhor ou conseguir ler com maior facilidade seu código, o qual
facilitará o desempenho de acordo com sua necessidade.
Desta forma, precisamos entender a necessidade do algoritmo para determinar
a ordenação a ser utilizada para o pior caso, médio caso e o melhor caso.
Dentre as características anteriormente mencionadas, determinaremos a
velocidade para sanar nossa necessidade em determinada situação.
Desta maneira, vejamos os principais métodos para ordenarmos os dados:
Ordenação por troca
BubbleSort (método bolha)
QuickSort (método de troca e repetição)
Ordenação por inserção
InsertionSort (método de inserção direta)
ShellSort (método otimizado de inserção)
Ordenação por seleção
SelectionSort (método da seleção direta)
HeapSort (método da seleção em árvore)
2.1 BubbleSort
O BubbleSort (também conhecido como método bolha) é simples e eficaz ao
ordenar pequenos números onde compara todos os valores, através de varias
trocas entre pares adjacentes de elementos, sempre que o próximo elemento
for menor que o anterior. Após a varredura no vetor e desde que o maior e
menor número esteja corretamente posicionado (dependendo de que forma
será solicitada a ordenação) ele não será mais comparado.
Abaixo veremos como é realizada a troca:
No laço while() foi criado e executado enquanto o valor de troca for true, sendo
que na primeira interação foi configurada como false.
O laço for percorre o primeiro elemento ate que o ultimo elemento -1 (nuca
chega a ler o ultimo elemento) verificando se o elemento atual é maior que o
próximo elemento que será lido.
Para verificarmos se a variável troca é útil, quando passa pela primeira vez no
vetor de elementos sendo realizada qualquer troca efetiva será true, fazendo
com que faça nova varredura em todos os elementos ate que todos estejam
devidamente ordenados.
2.2 QuickSort
3.1 InsertionSort
O InsertionSort (também conhecido por método de inserção direta) baseia-se
em ordenar da esquerda para a direita, onde os elementos lidos a esquerda
ficam ordenados, eficiente em ordenar um menor número de valores.
Abaixo veremos como é realizada a troca:
Aplicando InsertionSort
Abaixo temos exemplificando a medição com x elementos e o tempo gasto para ordenação:
4.1 SelectionSort
O SelectionSort (também conhecido como método de seleção direta) o vetor
selecionará sequencialmente os vetores de ordenação localizando o próximo
que seja o menor ou maior valor, sendo comparado ao do inicio, se verdadeira
a posição é trocada, assim ordenara o algoritmo.
Aplicação do SelectionSort
// Função select_sorte – Recebe uma matriz desordenada e a ordena com
// algoritmo select sort
//
// Entradas – matriz a ser ordenada
// - tamanho da matriz a ordenar
// Saídas - nenhuma
void select_sort(unsigned char matriz[], unsigned int tamanho){
100 38 ms 0 ms
1.000 359 ms 0 ms
10.000 3558 ms 0 ms
import java.io.IOException;
bubbleSort(vetor);
package quicksort;
import java.io.IOException;
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
quickSort(vetor,0,vetor.length-1);
vetor[inicio] = vetor[f];
vetor[f] = pivo;
return f;
}
}
//Esse algoritmo é Executado em = 31 ms
Analisando seu desempenho com diversos valores, o QuickSort obteve o
melhor resultado na maioria dos testes. Sua eficiência foi identificada apenas
nos grandes arquivos.
InsertionSort
package insertionsort;
import java.io.IOException;
/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException {
insertionSort(vetor);
6 Conclusão
Como era esperado, os algoritmos BubbleSort e InsertionSort tiveram
desempenhos muito inferiores aos QuickSort. Fica muito visível quando se
processa a organiza ção com um milhão de entradas, onde os dois primeiros
demoram mais de duas horas para processar enquanto os outros demoram
menos de um segundo. Também é visível a complexidade dos algoritmos se
pararmos para analisar as comparações e trocas. Nos primeiros algoritmos, a
taxa de aumento de trocas e comparações é superior a que a taxa dos últimos
dois algoritmos. O QuickSort possui um desempenho melhor com um milhão de
entradas do que os dos primeiros algoritmos usando dez mil elementos.
Entretanto, não podemos esquecer que cada algoritmo possui sua utilidade.
Por exemplo, em alguma aplicação onde o volume de dados é pequena e há
pouca inserção de novos dados, o InsertionSort pode sim ser utilizado, pois
bases de dados que estejam quase organizadas têm um desempenho razoável
com esse algoritmo.
7 BIBLIOGRAFIA