Professional Documents
Culture Documents
Bubble sort
O bubble sort, ou ordenao por flutuao (literalmente "por bolha"), um
algoritmo de ordenao dos mais simples. A ideia percorrer o vector diversas
vezes, a cada passagem fazendo flutuar para o topo o maior elemento da
sequncia. Essa movimentao lembra a forma como as bolhas em um tanque
de gua procuram seu prprio nvel, e disso vem o nome do algoritmo.
O vetor analisado comparando-se pares de chaves, a mais leve sobe,
a mais pesada desce, caso j estejam na posio correta, o prximo par
analisado.
No melhor caso, o algoritmo executa n operaes relevantes, onde n
representa o nmero de elementos do vector. No pior caso, so feitas n2
operaes. A complexidade desse algoritmo de Ordem quadrtica. Por isso,
ele no recomendado para programas que precisem de velocidade e operem
com quantidade elevada de dados.
Quicksort
O algoritmo Quicksort um mtodo de ordenao muito rpido e eficiente,
inventado por C.A.R. Hoare em 1960 e publicado em 1962 aps uma srie de
refinamentos. O Quicksort um algoritmo de ordenao por comparao no-
estvel.
Provavelmente o mais eficiente para ordenao interna, baseado no
paradigma Dividir-e-Conquistar.
O Quicksort adota a estratgia de diviso e conquista. A estratgia
consiste em rearranjar as chaves de modo que as chaves "menores" precedam
as chaves "maiores". Em seguida o Quicksort ordena as duas sublistas de
chaves menores e maiores recursivamente at que a lista completa se encontre
ordenada.
Complexidade de tempo: (n lg2 n) no melhor caso e caso mdio e (n2)
no pior caso.
Complexidade de espao: (lg2 n) no melhor caso e no caso mdio e (lg2
n) no pior caso. R. Sedgewick desenvolveu uma verso do Quicksort com
partio recurso de cauda que tem complexidade (n2) no pior caso.
Insertion sort
Insertion sort, ou ordenao por insero, um simples algoritmo de
ordenao, eficiente quando aplicado a um pequeno nmero de elementos. Em
termos gerais, ele percorre um vetor de elementos da esquerda para a direita e
medida que avana vai deixando os elementos mais esquerda ordenados.
Pode ser feita uma analogia com a organizao de cartas de baralho na
mo, cartas so recebidas e colocadas na mo aleatoriamente, durante a
organizao, cada carta colocada no seu lugar certo, uma por vez, deslocando
as demais.
Compara-se os pares de chaves, cada chave colocada na posio
correta para isso, outras so movidas. Caso j esteja na posio certa, passa-
se ao prximo par.
Menor nmero de trocas e comparaes entre os algoritmos de
ordenao O(n) quando o vetor est ordenado. Pior caso O(n)
Merge Sort
O merge sort, ou ordenao por intercalao, um exemplo de algoritmo
de ordenao do tipo dividir-para-conquistar.
Sua ideia bsica consiste em dividir (o problema em vrios subproblemas
e resolver esses subproblemas atravs da recursividade) e conquistar (aps
todos os subproblemas terem sido resolvidos ocorre a conquista que a unio
das resolues dos subproblemas). Como o algoritmo do Merge Sort usa a
recursividade em alguns problemas esta tcnica no muito eficiente devido ao
alto consumo de memria e tempo de execuo.
Baseado em dois procedimentos:
MERGE: Cria dois subvetores, cada um correspondente a uma
metade do vetor original, depois intercala os menores valores,
copiando-os de volta ao vetor original;
MERGE_SORT: Divide o problema original em subproblemas, e usa o
procedimento anterior para resolv-los.
Bucket Sort
Bucket sort, ou bin sort, um algoritmo de ordenao que funciona
dividindo um vetor em um nmero finito de recipientes. Pressupe que a entrada
consiste em nmeros inteiros distribudos uniformemente sobre um intervalo, ou
seja, que h um limite nos valores das chaves. O intervalo ento dividido em n
subintervalos de tamanhos iguais, os chamados buckets (baldes), cada chave
vai para o balde correspondente sua faixa de valor. Considerando a
uniformidade da distribuio, no esperamos muitas chaves em um mesmo
balde. Cada balde posteriormente ordenado, isoladamente dos demais.
Referencial Terico
Bubble sort
O mtodo mais simples. Suponha chaves em um vetor vertical A. Valores
baixos so leves e valores altos so pesados. Como bolhas, os valores leves
sobem no vetor um por vez, ao passo que os pesados descem.
Operao Troca(A[i], A[j]): os elementos das posies i e j trocam de
posio.
O vetor analisado comparando-se pares de chaves, a mais leve sobe,
a mais pesada desce, caso j estejam na posio correta, o prximo par
analisado.
Caractersticas:
Ordenao: Interna.
Complexidade: O(n2).
Quantidade de dados: Poucos.
Especificidades: Complexidade fixa e cdigo compacto.
Estabilidade: Sim.
Adaptabilidade: No. A implementao clssica realiza a mesma
quantidade de operaes mesmo se as chaves j estiverem ordenadas.
Quick sort
Desvantagens:
Tem um pior caso O(n2) comparaes.
Sua implementao muito delicada e difcil:
Um pequeno engano pode levar a efeitos inesperados para
algumas entradas de dados.
O mtodo no estvel.
Merge sort
Baseado no paradigma Dividir-e-Conquistar, divide o problema original
em problemas menores semelhantes. Resolve os problemas menores mais
fceis, combina os problemas menores para formar a soluo para o problema
original. mais fcil ordenar chaves parcialmente ordenadas. um algoritmo
recursivo.
Baseado em dois procedimentos Merge e Merge_Sort.
Merge
Cria dois subvetores, cada um correspondente a uma metade do vetor original,
depois intercala os menores valores, copiando-os de volta ao vetor original. Para
que funcione, o vetor original deve ter subvetores ordenados. Para isso, aplica-
se recursivamente o algoritmo.
Merge_Sort
Divide o problema original em subproblemas, e usa o procedimento
anterior para resolv-los. Divide o vetor ao meio recursivamente at que no seja
mais possvel subvetor com apenas uma chave.
Na volta das chamadas recursivas, combina e ordena os ltimos 2
subvetores. Na primeira vez, dois subvetores de apenas uma chave. Os
subvetores vo aumentando de tamanho, at formar o vetor original.
Caractersticas:
Ordenao: Interna/Externa.
Complexidade: 0(n log n).
Quantidade de dados: Muitos.
Alto consumo de memria, devido s vrias chamadas recursivas.
Estabilidade: Sim.
Adaptabilidade: No.
Desenvolvimento
Nesta tela inicial do sistema temos a opo de criar um vetor. Temos a
opo de se criar um vetor atravs de um arquivo de texto, para isso ser
necessrio mover o arquivo para raiz do sistema, ou seja, C: tambm ser
necessrio alterar o nome para nmeros.txt. Neste exemplo estamos criando um
vetor de 500 posies.
Podemos escolher a opo de obter os dados:
{17, 02, 12, 18, 04, 09, 16, 382, 6443, 4545, 1824, 4155, 2748, 912, 4130,
2798, 533, 761, 2134, 4190, 4914, 5008....... N}
Obteno de dados semi ordenados:
{ 0, 13, 22, 35, 36, 48, 50, 64, 70, 77, 109, 115, 167, 178, 186, 202,
207.....N}
Mtodo Bubble sort
Processamento
O algoritmo Bubble Sort percorre todo o vetor diversas vezes, por isso,
no recomendado o uso dele para aplicaes que requerem velocidade ou
trabalhem com uma grande quantidade de dados.
O algoritmo inicia comparando a primeira posio do vetor com a segunda
posio do vetor.
Como elemento 17 maior que o elemento 2 feito a troca de posio e
reordena-se o vetor. E assim feito ate o fim do vetor. Com isso o primeiro maior
valor fica no final do vetor.
Na segunda interao o 2 menor que o elemento 12, no h troca de
posio. Na prxima iterao, compara-se a Terceira posio do vetor, que tem
o elemento 12 comparando-o com a quarta posio do vetor, que tem o elemento
18.
Esse processo vai se repetir at que o vetor esteja ordenado. Na prxima
iterao, o segundo maior valor ser ordenado para penltima posio do vetor.
Essa ordenao lembra como as bolhas num tanque de gua procuram seu
prprio nvel, e disso vem o nome do algoritmo, Bubble Sort.
O mtodo ilustrado
Mtodo MergeSort
Processamento
Processamento
Escolher arbitrariamente um elemento do vetor (escolher uma estratgia
- normalmente o meio) e coloc-lo em uma varivel auxiliar X;
Inicializar dois ponteiros I e J (I = 1 e J = n);
Percorrer o vetor a partir da esquerda at que se encontre um V[I] >= X
(incrementando o valor de I);
Percorrer o vetor a partir da direita at que se encontre um V[J] <= X
(decrementando o valor de J);
Trocar os elementos V[I] e V[J] (esto fora de lugar) e fazer: I = I + 1 e J =
J - 1;
Continuar esse processo at que I e J se cruzem em algum ponto do vetor;
Aps obtidos os dois segmentos do vetor atravs do processo de partio, cada
um ordenado recursivamente
Listagem dos valores aleatrios depois da ordenao:
{2, 4, 6, 9, 12, 16, 17, 18, 174, 184, 192, 194, 195, 196, 206, 209, 216, 241,
248, 254, 261.....N}
Listagem dos valores semi ordenados depois da
ordenao:
{0, 13, 22, 35, 36, 48, 50, 59, 60, 64, 66, 70, 77, 80, 109, 115....N}
Comparaes entre os mtodos
Tempo gasto na ordenao de vetores com 500, 1000, 10000, 30000
elementos, organizados de forma aleatria (17, 02, 12, 18, 04, 09, 16, 382, 6443, 4545,
1824, 4155, 2748...N) e em ordem semi-ordenada ( 13, 22, 35, 36, 48, 50, 64, 70, 77,
109...N).
Ordem aleatria
Tempo (ms)
Elementos 500 1000 10000 30000
Bubble 4.0 20.0 137.0 1054.0
Sort
Merge Sort 1.0 2.0 5.0 13.0
Bubble sort
Para listas j ordenadas em ordem crescente o nico algoritmo que no
realiza movimentaes, mas em compensao o que tem o maior tempo e o maior
nmero de comparaes. No s em listas j ordenadas, mas em todos os casos o
bubble sort se mostrou um algoritmo ineficiente.
Quick Sort
O quick sort certamente o algoritmo mais eficiente em listas totalmente
desordenadas, ele se torna muito eficiente em relao aos outros no quesito de tempo.
Merge Sort
Quando utiliza-se muitos dados, o merge sort no aconselhado devido aos
inmeros clculos realizados atravs da recurso pelo processador e tambm aloca
o dobro de memria por usar um array auxiliar. Isto pode acarretar em mais tempo de
execuo onde outros mtodos podem ser mais eficientes.
Resultados e Discusso
BubbleSort
Vantagens
Fcil Implementao.
Algoritmo Estvel.
Desvantagens
O fato de o arquivo j estar ordenado no ajuda em nada.
Ordem de complexidade quadrtica.
QuickSort
pior caso.
Vantagens
Extremamente Eficiente
Necessita apenas de uma pequena pilha como memria extra
Complexidade n log n
Desvantagens
Tem um pior caso de O(n2)
Implementao difcil
No estvel
MergeSort
MergeSort.java
public class MergeSort {
long inicio, fim, total;
private int[] array;
private int[] tempMergArr;
private int length;
QuickSort.java
import javax.swing.JOptionPane;
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
return i;
}
return aux;
}
}
Tela.java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.List;
import java.awt.Toolkit;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Date;
import java.util.Random;
import javax.swing.JList;
import javax.swing.JTextArea;
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.awt.Point;
import java.awt.Window.Type;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JTextPane;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* Create the frame.
*/
public Tela() {
String apresentacao = "";
apresentacao += "- - - Atividade Prtica Supervisionada\n";
apresentacao += "- - - " + data + "\n\n";
apresentacao += "Esse programa foi desenvolvido com a
finalidade\n"
+ "de apresentar os resultados de alguns
algoritmos\n"
+ "de ordenao de dados. Com ele ser
possvel ob-\n"
+ "ter tempos de execuo dos trs mtodos
escolhi-\n"
+ "dos, que so: BubbleSort, MergeSort e
QuickSort.\n";
JOptionPane.showMessageDialog(null, apresentacao);
setTitle("APS");
//evento abrir tela do programa
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent arg0) {
//redimensionar
setSize(450, 320);
}
});
setFont(new Font("Times New Roman", Font.PLAIN, 12));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1525, 804);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
//painel titulo
JPanel panelTitulo = new JPanel();
contentPane.add(panelTitulo, BorderLayout.NORTH);
//label titulo
JLabel lbTitulo = new JLabel("T\u00E9cnicas de
Ordena\u00E7\u00E3o de Dados");
lbTitulo.setFont(new Font("Times New Roman", Font.PLAIN, 30));
panelTitulo.add(lbTitulo);
//painel dados
JPanel panelDados = new JPanel();
panelDados.setToolTipText("Obter dados");
panelDados.setBorder(UIManager.getBorder("CheckBox.border"));
contentPane.add(panelDados, BorderLayout.CENTER);
painelDados = panelDados;
ordenadoQuick = null;
ordenadoQuick = new int[aleatorio.length];
ordenadoQuick = quick.quickSort(aleatorio, 0,
aleatorio.length - 1);
//botao automatico
JButton btnAuto = new JButton("Autom\u00E1tico");
//click
btnAuto.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Random r = new Random();
long inicio = System.currentTimeMillis();
for (int i = 0; i < tamanho; i++)
aleatorio[i] = r.nextInt(tamanho * 13);
long total = System.currentTimeMillis() - inicio;
invisibleEtapa1();
lbTempoGerar.setVisible(true);
lbTempoGerar.setText("Tempo para gerar: " +
String.valueOf(total));
lbTamanho.setVisible(true);
lbTamanho.setText(lbTamanho.getText() +
String.valueOf(tamanho));
}
});
btnAuto.setVisible(false);
btnAuto.setFont(new Font("Times New Roman", Font.PLAIN,
16));
btAuto = btnAuto;
//botao teclado
JButton btnTeclado = new JButton("Pelo teclado");
//click
btnTeclado.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
for (int i = 0; i < tamanho; i++)
aleatorio[i] =
Integer.parseInt(JOptionPane.showInputDialog(null,
"Faltam "+
String.valueOf(tamanho - i) +" valores...\nInforme um valor aleatrio:", "Valor", 0));
invisibleEtapa1();
lbTempoGerar.setVisible(true);
lbTempoGerar.setText("Gerado manualmente");
lbTamanho.setVisible(true);
lbTamanho.setText("Tamanho: " +
String.valueOf(tamanho));
}
});
btnTeclado.setVisible(false);
btnTeclado.setFont(new Font("Times New Roman", Font.PLAIN,
16));
btTeclado = btnTeclado;
//botao arquivo
JButton btnArquivo = new JButton("Arquivo");
btnArquivo.addMouseListener(new MouseAdapter() {
boolean helpArquivo = true;
@Override
//Evento Mouse em Cima do Botao Arquivo
public void mouseEntered(MouseEvent arg0) {
if (helpArquivo){
helpArq =
JOptionPane.showConfirmDialog(null,
"Para utilizar a opo de criar
um vetor atrves de arquivo,\n"
+ "ser necessrio mover o
arquivo para raiz do sistema, ou seja:\n"
+ "'C:\', tambm ser necessrio
alterar o nome para numeros.txt\n\n"
+ "Deseja ver esse aviso
novamente?",
"Carregamento via arquivo de
texto",
JOptionPane.INFORMATION_MESSAGE);
if (helpArq == 1)
helpArquivo = false;
}
}
});
btnArquivo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
caminho_arquivo = "C:\\numeros.txt";
if (temporario == null){ // se
chegou no fim
break;
}
aux[contador++] +=
Double.parseDouble(temporario);
}
lbTempoGerar.setVisible(true);
lbTempoGerar.setText("Gerado via
arquivo");
lbTamanho.setVisible(true);
lbTamanho.setText("Tamanho: " +
String.valueOf(tamanho));
tamanho = pos;
aleatorio = new int[tamanho];
for (int i = 0; i < tamanho; i++)
aleatorio[i] = aux[i];
invisibleEtapa1();
} else {
// nao existe
JOptionPane.showMessageDialog(null, "O
arquivo no existe :(", "Erro", JOptionPane.ERROR_MESSAGE);
}
//label
JLabel lblTamanhoDoVetor = new JLabel("Tamanho do vetor?");
//TextField
txtTamVetor = new JTextField();
//Somente numero
txtTamVetor.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent arg0) {
char caracter = arg0.getKeyChar();
if (((caracter < '0') || (caracter > '9'))
&& (caracter != '\b')) {
arg0.consume();
}
}
});
txtTamVetor.setColumns(10);
.addGroup(gl_panelDados.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_panelDados.createParallelGroup(Alignment.TRAILING, false)
.addComponent(btnArquivo,
Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(btnTeclado,
Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 346, Short.MAX_VALUE)
.addComponent(btnGerarVetor,
Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 346, Short.MAX_VALUE)
.addComponent(btnAuto,
Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 346,
GroupLayout.PREFERRED_SIZE))
.addGroup(gl_panelDados.createSequentialGroup()
.addGroup(gl_panelDados.createParallelGroup(Alignment.BASELINE)
.addComponent(lblTamanhoDoVetor)
.addComponent(txtTamVetor,
GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnGerarVetor)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnTeclado)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnAuto)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnArquivo)
.addContainerGap(455, Short.MAX_VALUE))
);
panelDados.setLayout(gl_panelDados);
//painel metodos
JPanel panelMetodos = new JPanel();
panelMetodos.setVisible(false);
contentPane.add(panelMetodos, BorderLayout.WEST);
painelMetodos = panelMetodos;
//textarea
JTextArea textAleatorio = new JTextArea();
textAleatorio.setBackground(Color.LIGHT_GRAY);
textAleatorio.setFont(new Font("Times New Roman", Font.PLAIN,
14));
textAleatorio.setLineWrap(true);
txtAleatorio = textAleatorio;
//label bubble
JLabel lbBubble = new JLabel("0");
lbBubble.setFont(new Font("Times New Roman", Font.PLAIN,
18));
lbBubble.setVisible(false);
labelBubble = lbBubble;
//label quick
JLabel lbQuick = new JLabel("0");
lbQuick.setFont(new Font("Times New Roman", Font.PLAIN, 18));
lbQuick.setVisible(false);
labelQuick = lbQuick;
//texarea bubble
JTextArea textBubble = new JTextArea();
textBubble.setLineWrap(true);
textBubble.setVisible(false);
textBubble.setBackground(Color.LIGHT_GRAY);
textBubble.setText("N\u00E3o executado!");
txtBubble = textBubble;
//textarea quick
JTextArea textQuick = new JTextArea();
textQuick.setLineWrap(true);
textQuick.setVisible(false);
textQuick.setBackground(Color.LIGHT_GRAY);
textQuick.setText("N\u00E3o executado!");
txtQuick = textQuick;
//botao bubblesort
JButton btnBubble = new JButton("BubbleSort");
//click
btnBubble.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ordenadoBubble = bubble.ordena(aleatorio);
txtBubble.setText(exibiVetor(ordenadoBubble));
lbBubble.setText(String.valueOf(bubble.getTotal()));
visibleContadoresBubble();
btnOrdenarDecrescente.setVisible(true);
}
});
btnBubble.setMnemonic(KeyEvent.VK_ENTER);
//botao quicksort
JButton btnQuick = new JButton("QuickSort");
//click
btnQuick.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
quick.inicio();
ordenadoQuick = quick.quickSort(aleatorio, 0,
tamanho-1);
quick.fim();
quick.total();
long total = quick.getTotal();
lbQuick.setText(String.valueOf(total));
txtQuick.setText(exibiVetor(ordenadoQuick));
visibleContadoresQuick();
btnOrdenarDecrescente.setVisible(true);
}
});
//label segs
JLabel lbSegs = new JLabel("milisegundos");
lbSegs.setFont(new Font("Times New Roman", Font.PLAIN, 18));
lbSegs.setVisible(false);
seg = lbSegs;
//labels segss
JLabel lbSegs2 = new JLabel("milisegundos");
lbSegs2.setFont(new Font("Times New Roman", Font.PLAIN,
18));
lbSegs2.setVisible(false);
segs = lbSegs2;
//botao merge
JButton btnMerge = new JButton("MergeSort");
btnMerge.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
merge.inicio();
merge.sort(aleatorio);
ordenadoMerge = merge.getArray();
merge.fim();
merge.total();
long total = merge.getTotal();
lbMerge.setText(String.valueOf(total));
txtMerge.setText(exibiVetor(ordenadoMerge));
visibleContadoresMerge();
btnOrdenarDecrescente.setVisible(true);
}
});
//textarea
JTextArea textMerge = new JTextArea();
textMerge.setLineWrap(true);
textMerge.setVisible(false);
textMerge.setBackground(Color.LIGHT_GRAY);
textMerge.setText("N\u00E3o executado!");
txtMerge = textMerge;
//botaoVoltar
JButton btnVoltar = new JButton("Voltar");
btnVoltar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//alternar paineis
painelDados.setVisible(true);
painelMetodos.setVisible(false);
//zerar variaveis
tamanho = 0;
aleatorio = null;
ordenadoBubble = null;
ordenadoQuick = null;
ordenadoMerge = null;
aux = null;
//zerar campos
txtAleatorio.setText("");
txtTamVetor.setText("");
lbTamanho.setText("Tamanho: ");
//ativar botoes
btnBubble.setEnabled(true);
btnQuick.setEnabled(true);
btnMerge.setEnabled(true);
}
});
GroupLayout gl_panelMetodos = new
GroupLayout(panelMetodos);
gl_panelMetodos.setHorizontalGroup(
gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addContainerGap()
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addComponent(lblVetorAleatorio)
.addComponent(lbTamanho))
.addGap(171))
.addGroup(gl_panelMetodos.createSequentialGroup()
.addPreferredGap(ComponentPlacement.RELATED)))
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addGap(17)
.addComponent(lbBubble)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(lbSegs))
.addGroup(Alignment.LEADING, gl_panelMetodos.createSequentialGroup()
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addComponent(btnOrdenarDecrescente)
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addComponent(lbQuick)
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addPreferredGap(ComponentPlacement.RELATED)))
.addGap(9))
.addGroup(gl_panelMetodos.createSequentialGroup()
.addComponent(textQuick, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(ComponentPlacement.RELATED)))
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addPreferredGap(ComponentPlacement.RELATED, 77, Short.MAX_VALUE)
.addComponent(lbMerge)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(lbSegs3))
.addGroup(gl_panelMetodos.createSequentialGroup()
.addGap(134)
.addComponent(lbMetodos)
.addGap(40)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addComponent(lbTempoGerar)
.addContainerGap(855,
Short.MAX_VALUE))))
);
gl_panelMetodos.setVerticalGroup(
gl_panelMetodos.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addGap(27)
.addComponent(lbMetodos))
.addGroup(gl_panelMetodos.createSequentialGroup()
.addContainerGap()
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addComponent(lblVetorAleatorio)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(lbTamanho)))))
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panelMetodos.createSequentialGroup()
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnOrdenarDecrescente)
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.BASELINE)
.addComponent(btnMerge)
.addComponent(btnQuick)
.addComponent(btnBubble))
.addGap(5)
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.BASELINE)
.addComponent(lbSegs2)
.addComponent(lbSegs)
.addComponent(lbSegs3)
.addComponent(lbMerge)
.addComponent(lbQuick)
.addComponent(lbBubble))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_panelMetodos.createParallelGroup(Alignment.BASELINE)
.addComponent(lbTempoGerar)
.addGap(18)
.addComponent(textAleatorio,
GroupLayout.PREFERRED_SIZE, 572, GroupLayout.PREFERRED_SIZE)))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
panelMetodos.setLayout(gl_panelMetodos);
setLocation(256, 100);
} // fim construtor
//bubble
public void visibleContadoresBubble(){
labelBubble.setVisible(true);
txtBubble.setVisible(true);
seg.setVisible(true);
}
//quick
public void visibleContadoresQuick(){
labelQuick.setVisible(true);
txtQuick.setVisible(true);
segs.setVisible(true);
}
//merge
public void visibleContadoresMerge(){
labelMerge.setVisible(true);
txtMerge.setVisible(true);
segss.setVisible(true);
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Tela frame = new Tela();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Referncias Bibliogrficas
Livros:
Ziviani, N. Projeto de Algoritmos com Implementaes em Pascal e C, So Paulo,
Brazil, Cengage Learning
Cormen, Leiserson, Rivest. Introduction to Algorithms. 2nd edition. MIT Press, 2001.
Captulos 2, 6, 7, 8.
Aho, Alfred V., Hopcroft, John F., Ullman, Jeffrey D., Data Structure and Algorithms,
Massachusetts: Addison- Wesley, 1987. Captulo 8.
AZEREDO, Paulo A.. Mtodos de Classificao de Dados e Anlise de suas
Complexidades. Rio de Janeiro: Campus, 1996
Texto de Internet
Colturato, Daniela. Ordenao de dados. Disponvel em: <http://dbcolturato.info>.
Acesso em 17 de junho de 2015.