Buscar

Algoritmos de Ordenação em Java

Prévia do material em texto

Pesquisa, Ordenação e Técnicas de Armazenamento
Algoritmos de ordenação
Atividade Pratica Supervisionada
Fernando Roberto Sedano Sanchez RA: 21208264
Linguagem de programação: Desenvolvido na linguagem de programação Java. 
Método de geração de vetores aleatórios: Utilizamos um método da biblioteca da linguagem Java chamado Math.ramdon que tem objetivo de gerar numeros aleatórios. 
Adaptação dos algoritmos para realizarem a contagem do numero de comparações: Criamos uma variável em todos os algoritmos que soma toda vez que ocorre comparação no algoritmo e no final ela é imprimida. 
Criação de um método para que cada algoritmo ordenasse os mesmos vetores que os demais: Foi criado um método que cópia um vetor em outro elemento por elemento, e ele é usado antes de cada algoritmo para colocar o vetor em desordem. 
Analise do desempenho dos algoritmos: O desempenho dos algoritmos foi realizado através de gráficos de barra. 
Solução Proposta
Preenche o vetor com elementos aleatórios de 0 até seu tamanho
Gera um valor randômico de 0.0 até menores que 1.0 e multiplica 
pelo tamanho do vetor convertendo o valor para INT
Salva os elementos do vetor a no vetor b um por um
Algoritmos de ordenação – Bubble Sort
É um método de ordenação por troca que atua comparando sucessivamente pares de elementos e mudando-os de posição quando se apresentam fora da ordem desejada.
Complexidade Computacional:
Pior caso O (n²) 
Melhor caso O (n) 
Caso médio O (n²) 
Coloca os maiores al final
Percorre o vetor , caso tenha que trocar
algum valor ele percorre o vetor outra vez 
Se não tiver trocado nenhum valor ele termina de percorrer
Variável para saber quando parar de percorrer o vetor
Variável para contar a quantidade de comparações
Salva o tamanho do vetor
É um algoritmo bastante simples, por seleção, que é recomendado para conjuntos pequenos de dados. 
O algoritmo do Selection Sort consiste em três passos: 
• Navegue pelo vetor até encontrar o menor valor desse vetor; 
• Remova esse valor do vetor e insira na primeira posição do vetor de resposta; 
• Repita esse passo para cada item presente no vetor. 
Complexidade computacional: Para todos os casos será sempre O (n²) 
Algoritmos de ordenação – Selection Sort
Procura o menor e coloca o começo 
Salva o primeiro índice como o que possui o menor elemento
Caso exista algum valor menor do que o que esta no começo ele 
Troca o valor do mínimo e depois troca os elementos da posição
Algoritmo simples, por inserção, que percorre um vetor de elementos da esquerda para a direita. 
Complexidade computacional:
Pior caso O (n²) 
Melhor caso O (n) 
Caso médio O (n²) 
Algoritmos de ordenação – Insertion Sort
Vai de esquerda para a direita deixando a esquerda ordenada 
Acrescenta quando ocorre comparação mas não ocorre troca quando da false 
Ordena da direita para a esquerda a cada novo índice 
Acrescenta quando acontece troca
Utiliza uma árvore Heap como estrutura intermediária para efetuar a ordenação. 
Max-heap ➔ árvore binária quase completa em que cada pai é maior ou igual que qualquer de seus filhos. 
Min-heap ➔ árvore binária quase completa em que cada pai é menor ou igual que qualquer de seus filhos. 
Complexidade computacional: 
Para todos os casos será O (n log (n))
Algoritmos de ordenação – Heap Sort
Usa arvores para ordenar vetores
Cria a arvore
Ao criar a arvore o maior valor já fica ordenado 
A cada iteração a arvore diminui 
Chamada apenas uma vez , no inicio , para criar a arvore
O inicio é o ultimo pai do vetor
Cada vez que arruma o arvore , o maior valor fica na primeira posição
Troca o primeiro filho
Troca o segundo filho
Se o trocar não mudar quer dizer que o pai é maior que seus filhos 
Merge Sort é um dos algoritmos de ordenação que possuem a estratégia divisão e conquista.
Consiste dividir o problema em “partes” menores, e repetir o processo para cada uma dessas partes.
Complexidade computacional:
Para todos os casos sua complexidade será O (Log (n))
Algoritmos de ordenação – Merge Sort
Copia o elementos do vetor do inicio até o meio no vetoraux
Copia os elementos do vetor do meio até o fim no vetoraux ao contrario 
Compara os menores valores do lado esquerdo do vetor com os menores do lado direito
-Mais rápido que se conhece
-Estratégia Dividir-e-conquistar
-Utiliza um pivô 
-Melhor opção para ordenar vetores grandes 
-Instável 
Complexidade computacional:
Melhor caso O (n log n) 
Caso médio O (n log n) 
Pior caso O (n²) 
Algoritmos de ordenação – Quick Sort
Divide o vetor no meio e coloca os valores menores que o
 pivô a esquerda e os maiores a direita
Usa o primeiro elemento como pivô
As duas variáveis começam no fim toda vez que encontra um valor a esquerda 
que é maior do que o pivô , o valor é mandado para a direita
Percorre o vetor da direita para a esquerda , comparando os valores 
na posição esquerda
O pivô deve ser maior do que está a esquerda e menor do que esta a direita
No final do while a posição direita vai representar o meio do vetor
Retorna o meio
Algoritmos de ordenação – Radix Sort
Ordena pelas unidades, depois dezenas , centena , milhares ...
Encontra o maior 
Realiza o CountSort para as unidades , depois para as dezenas , centenas , milhares
-Utiliza um vetor auxiliar para contar a quantidade de elementos no vetor
-Faz a soma da frequência dos elementos
-Usa a soma das frequências para descobrir o índice dos elementos em um novo vetor
Complexidade computacional:
Para todos os casos sua complexidade será O (n)
Algoritmos de ordenação – Count Sort
Neste CountSort tem o normal e o utilizado no RadixSort dependendo do tipo 0= normal , 1 = radix
Procura maior valor do vetor
Cria um vetor com tamanho = ao maior valor do vetor
Mas 1 , com isso existe um índice para cada valor possível no vetor
Coloca 0 em todos os índices do vetorAux
Percorre o vetor e acrescenta 1 em cada índice do VetorAux caso encontre o Valor no vetor, com isso não temos os valores mas temos a quantidade que os valores se repetem ( em relação a sua casa decimal)
Percorre o vetor e acrescenta 1 em cada índice do vetorAux caso
Encontre o valor no vetor , com isso não temos os valores mas temos a quantidade
que os valores se repetem
Agora ele percorre o vetorAux acrescentando em 1 o valor
I +(i-1) dessa forma teremos a frequência dos elementos
Coloca os valores ordenados em relação a casa decimal
No vetor final
Coloca os valores ordenados no vetorfinal
Copia o vetorFinal no vetor
-Utiliza ‘baldes’ para ordenar
-Divide os elementos do vetor em baldes
-Utiliza o Insertion Sort para ordenar os baldes e depois concatena eles
-Parecido com o Count Sort, porém sem a frequência
Complexidade computacional:
Pior Caso O (n²) 
Melhor = Médio Caso O (n)
Algoritmos de ordenação – Bucket Sort
Usa baldes para ordenar os vetores
Procura maior valor do vetor
Cria bucket com tamanho igual ao maior valor
do vetor mas 1 , com isso existe um índice para cada valor
possível no vetor
Percorre o vetor e acrescenta 1 em cada índice do bucket caso encontre o valor no vetor , com isso não temos os valores mas temos a quantidade que os valores se repetem
Agora ele percorre o bucket , caso o bucket na posição i tenha um valor diferente de 0 quer dizer que o valor do índice dele existe no vetor , com isso ele acrescenta o índice quantas vezes ele estiver registrado no bucket
Analise de desempenho – Vetor 5 posições
Analise de desempenho – Vetor 50 posições
Analise de desempenho – Vetor 100 posições
Analise de desempenho – Vetor 1000 posições
Analise de desempenho – Vetor 10000 posições
Analise de desempenho – Vetor 10 posições

Continue navegando