Aps 3 Semestre UNIP
Aps 3 Semestre UNIP
Aps 3 Semestre UNIP
3 PERIODO
ndice
Objetivo
Trabalho___________________________________________________3
Introduo_________________________________________________________4
Referencial Terico___________________________________________________6
Desenvolvimento____________________________________________________15
Resultados e Discusso______________________________________________25
Consideraes Finais________________________________________________28
Referncias Bibliogrficas____________________________________________29
Cdigo Fonte_______________________________________________________30
Fichas APS________________________________________________________43
Objetivo do Trabalho
2
Introduo
3
Bubble Sort
o mtodo mais intuitivo e simples de ser implementado, porm o menos
eciente.
Selection Sort
Neste tipo de ordenao, se seleciona o menor elemento do subvetor no ordenado
e troca com o primeiro elemento deste subvetor
Quick Sort
O quicksort um algoritmo de ordenao considerado entre os mais rpidos e
eficientes.
Referencial Terico
A escolha de um mtodo de ordenao deve se, a necessidade a qual o
software requer, disponibilizando-se de uma biblioteca j estabelecida, porm no
fixa, ou seja, podem surgir vrias outras, o desenvolvedor pode optar por diversas
formas de ordenar. Porm alguns mtodos so mais simples e outros mais
complexos ou mais eficientes e menos eficientes.
Existem vrios desenvolvedores e criadores de mtodos e lgicas, mas
podemos colocar em destaque James Gosling, que agrega grande conhecimento e
influncia, assim como experincia, sendo referncia na rea tecnolgica, ajudando
a inovar e produzir novos conceitos.
Bubble Sort
Bubble sort um simples e bem conhecido algoritmo de ordenao. Ele usado
mais para prtica inicial, para ajudar na introduo aos algoritmos de ordenao.
Bubble sort pertence aos O (n) algoritmos de ordenao, o que o torna bastante
ineficiente para ordenar grandes volumes de dados. Bubble sort estvel e
adaptativo.
Algoritmo
1. Compara cada par de elementos adjacentes do incio do vetor e, se eles
estiverem na ordem reversa, troca eles de lugar.
2. Se ao menos uma troca foi feita, repete o primeiro passo.
Voc pode imaginar como se em cada passo grandes bolhas flutuam at a superfcie
e ficam l. Em um momento, quando nenhuma bolha flutua, a ordenao para.
Vejamos um exemplo do algoritmo ordenando um vetor para termos uma idia mais
clara sobre o bubble sort.
Anlise de Complexidade
Em casos de complexidade mediana ou alta, o bubble sort possui desempenho de O
(n). Assim como, ele efetua O (n) trocas nos piores casos. Bubble sort adaptativo.
Isso significa que em vetores quase ordenados seu desempenho estimado O(n).
Evite implementaes que no confiram se o vetor j est ordenado em cada passo
(qualquer troca feita). Essa checagem necessria, em ordem para preservar
propriedades adaptativas.
Exemplo:
Ordenando {5, 1, 12, -5, 16} usando bubble sort.
Algoritmo
A ideia do algoritmo bem simples. O vetor imaginariamente dividido em duas
partes, ordenada e no ordenada. No comeo, a ordenada est vazia, enquanto a
no ordenada contm todo o vetor. A cada passo, o algoritmo acha o elemento
mnimo na parte no ordenada e adiciona ele para o final da parte ordenada.
Quando a parte no ordenada se torna vazia, o algoritmo encerra.
Anlise de Complexidade
Ordenao por seleo acaba quando a parte no ordenada se torna vazia. Como
ns sabemos, em cada passo o nmero de elementos no ordenados diminui por 1.
Portanto, ordenao por seleo faz n passos (n o nmero de elementos no vetor)
antes de terminar. Cada passo requer achar um mnimo na parte no ordenada.
Assim sendo, n + (n - 1) + (n - 2) + ... + 1, resulta em O (n) nmeros de
comparaes. Nmeros de trocas podem variar de 0 (no caso de um vetor
ordenado) a n - 1 (no caso do vetor ser ordenado em ordem reversa), que resulta em
O(n) nmeros de trocas. Em geral a complexidade do algoritmo O (n).
Em fato, ordenao por seleo requer (n 1) nmeros de trocas na maioria,
tornando-o bastante eficiente em situaes, onde a operao de obter
significantemente maior do que a opo de ler.
Exemplo:
Ordenando {5, 1, 12, -5, 16, 2, 12, 14} usando ordenao por seleo.
10
Quicksort
Quicksort um rpido algoritmo de ordenao, que usado no s para o meio
educacional, mas altamente aplicado em prtica. Em mdia, ele tem O(n log n) de
complexidade, tornando o quicksort adequado para ordenar grandes volumes de
dados.
A ideia do algoritmo bem simples e quando voc perceber, voc poder escrever
quicksort to rpido quando o bubble sort.
Algoritmo
A estratgia de dividir e conquistar usada no quicksort. Abaixo o processo de
recurso descrito:
11
12
Exemplo:
Ordenando {1, 12, 5, 26, 7, 14, 3, 7, 2} usando quicksort.
13
Anlise da Complexidade
Em mdia, o quicksort possui O (n log n) de complexidade, mas nos piores casos,
o quicksort roda em O (n) de tempo, mas nos mais "prticos" dados ele funciona
bem e superior outros O (n log n) algoritmos de ordenao.
Observaes extras
recomendado que o algoritmo de partio seja usado como uma funo separada,
por exemplo, a utilizao de duas funes, uma de partio e outra de ordenao
que utiliza a de partio.
14
Desenvolvimento
15
Agora, requisitado pelo programa que o usurio digite um nmero, para ser
armazenado e depois usado para a ordenao.
16
17
Caso a opo digitada for N, o usurio ser apresentado a essa tela, na qual o
programa estar requisitando a opo para selecionar o modo de ordenao em que
os valores sero ordenados. Se o usurio digitar 1, ser utilizado o Bubble Sort,
caso digite 2, ser utilizado o Selection Sort e se for digitado o 3, ser utilizado o
Quick Sort. Nesse caso, a opo informada pelo usurio o Bubble Sort, de nmero
1.
18
Aps isso, sero apresentados nessa tela final o nmero total de ndices informados
pelo usurio, a ordem original de seus valores, a ordem final, obtida aps a
ordenao pelo mtodo selecionado e o tempo total decorrido durante a ordenao
dos dados.
19
20
21
22
Por ltimo, como no primeiro caso, nas duas imagens seguintes sero apresentados
o nmero total de ndices gerados de forma aleatria, a ordem original de seus
valores, a ordem final, obtida aps a ordenao pelo mtodo selecionado e o tempo
total decorrido durante a ordenao dos dados.
23
24
Resultados e Discusso
Dados Aleatrios
30000
25000
20000
Cem
Mil
15000
Dez Mil
Cem Mil
10000
5000
0
Bubble Sort
Selection Sort
Quick Sort
25
com o segundo da lista, o Selection Sort. E como melhor desempenho bem acima
dos demais se encontra o Quick Sort.
16000
14000
12000
10000
Cem
Mil
8000
Dez Mil
6000
Cem Mil
4000
2000
0
Bubble Sort
Selection Sort
Quick Sort
26
16000
14000
12000
10000
Cem
Mil
8000
Dez Mil
6000
Cem Mil
4000
2000
0
Bubble Sort
Selection Sort
Quick Sort
27
Consideraes Finais
No trabalho foi apresentado o que so mtodos de ordenao, alguns dos mais
conhecidos, foi explicado como funcionam, seus desempenhos e foram tambm
aplicados na prtica em um programa. Em relao aos desempenhos dos mtodos,
o quick sort o algoritmo mais eficiente que existe para uma grande variedade de
situaes, recursivo, o que demanda uma pequena quantidade de memria
adicional.
28
Referncias Bibliogrficas
http://www.algolist.net/Algorithms/
http://wiki.icmc.usp.br/images/b/b3/SCC501Cap4.pdf
http://homepages.dcc.ufmg.br/~cunha/teaching/20121/aeds2/sortingcmp.pdf
http://opendevnotes.blogspot.com.br/2008/09/java-medir-tempo-de-execuo-detarefas.html
29
Cdigo Fonte
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aps;
import javax.swing.JOptionPane;
import java.util.ArrayList;
/**
*
* @author Bruno
*/
public class APS {
//Bubble
static void Bubblesort(int [] vetor){
30
int n = vetor.length;
int MenorNumero;
MenorNumero = vetor[j-1];
vetor[j-1] = vetor[j];
vetor[j] = MenorNumero;
}
}
}
}
aux = j;
while (i <= j) {
while (vetor[i] < pivot)
i++;
while (vetor[j] > pivot)
j--;
32
if (i <= j) {
tmp = vetor[i];
vetor[i] = vetor[j];
vetor[j] = tmp;
i++;
j--;
}
return i;
}
}
33
do {
opcao =JOptionPane.showInputDialog("Digite 1 para escolher os nmeros e 2
para usar nmeros aleatrios");
if (opcao.equals("1")) {
34
while (!continuar.equals("n")) {
vetororiginal.add(Integer.parseInt(JOptionPane.showInputDialog("Digite um
nmero")));
contador++;
continuar = JOptionPane.showInputDialog("Continuar? Pressione qualquer
tecla para sim ou N para nao");
}
n = contador;
int vetorordenado[] = new int[n];
for (i = 0;i<n;i++) {
vetorordenado[i] = Integer.parseInt(vetororiginal.get(i).toString());
}
do {
opcao = JOptionPane.showInputDialog("Digite 1 para Bubble Sort, 2 para
Selection Sort ou 3 para Quick Sort");
if (opcao.equals("1")) {
Chronometer.start();
Bubblesort(vetorordenado);
Chronometer.stop();
time = Chronometer.elapsedTime();
else {
if (opcao.equals("2")) {
Chronometer.start();
SelectSort(vetorordenado);
Chronometer.stop();
time = Chronometer.elapsedTime();
}
else {
APS ordenarQuick = new APS();
Chronometer.start();
ordenarQuick.quickSort(vetorordenado, 0, n-1);
Chronometer.stop();
time = Chronometer.elapsedTime();
}
36
System.out.println("");
//aleatorio
else {
n = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de
nmeros aleatrios"));
int x;
int vetorordenado[];
vetorordenado = new int[n];
37
vetorordenado[i] = x;
}
do {
opcao = JOptionPane.showInputDialog("Digite 1 para Bubble Sort, 2 para
Selection Sort ou 3 para Quick Sort");
if (opcao.equals("1")) {
Chronometer.start();
Bubblesort(vetorordenado);
Chronometer.stop();
time = Chronometer.elapsedTime();
38
else {
if (opcao.equals("2")) {
Chronometer.start();
SelectSort(vetorordenado);
Chronometer.stop();
time = Chronometer.elapsedTime();
}
else {
APS ordenarQuick = new APS();
Chronometer.start();
ordenarQuick.quickSort(vetorordenado, 0, n-1);
Chronometer.stop();
time = Chronometer.elapsedTime();
}
}
System.out.println("");
/*
* To change this license header, choose License Headers in Pgina 40 de 42
Project Properties.
* To change this template file, choose Tools | Templates
40
/**
*
* @author Bruno
*/
public final class Chronometer {
/**
* Inicia a contagem temporal
*/
public static void start() {
startValue = System.currentTimeMillis();
stopValue = 0;
timeDiff = 0;
}
/**
* Calcula a diferena temporal
41
*/
public static void stop() {
stopValue = System.currentTimeMillis();
timeDiff = stopValue - startValue;
}
/**
* Retorna o diferena de tempo medida
* @return tempo em milisegundos
*/
public static long elapsedTime() {
return timeDiff;
}
}
42