Buscar

ATIVIDADES PRÁTICAS SUPERVISIONADAS 4 SEMESTRE CIENCIA DA COMPUTAÇÃO

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CIÊNCIA DA COMPUTAÇÃO 
DESENVOLVIMENTO DE SISTEMA PARA ANÁLISE DE PERFORMANCE DE ALGORITMOS DE ORDENAÇÃO DE DADOS
MANAUS - 2017
DESENVOLVIMENTO DE SISTEMA PARA ANÁLISE DE PERFORMANCE DE ALGORITMOS DE ORDENAÇÃO DE DADOS
Trabalho solicitado pelo Professor para obtenção de nota para o Quarto Semestre na matéria de Atividades Práticas Supervisionadas ,no curso de Ciência da Computação.
 
MANAUS - 2017
Sumário
OBJETIVO DO TRABALHO	4
INTRODUÇÃO	5
REFERENCIAL TEÓRICO	8
DESENVOLVIMENTO	11
RESULTADOS E DISCUSSÃO	19
CONSIDERAÇÕES FINAIS	22
REFERÊNCIAS BIBLIOGRÁFICAS	23
CÓDIGO-FONTE DA APLICAÇÃO	25
OBJETIVO DO TRABALHO
O objetivo deste trabalho é pesquisar afundo a respeito dos Algoritmos de Ordenação, em especial o Insertion Sort, Selection Sort e Bubble Sort. Estas três técnicas foram escolhidas pela equipe para serem implementadas em um programa na linguagem JAVA, tendo o intuito de testar e comparar os resultados para mostrar qual as características e qual a mais eficaz dentre as três.
INTRODUÇÃO
Um computador é uma máquina que manipula informações. O estudo da ciência da computação inclui o exame da organização, manipulação e utilização destas informações num computador. Conseqüentemente, é muito importante compreendê-los. 
O aspecto marcante da atual sociedade é a automatização de tarefas, e na ciência da computação há um processo de desenvolvimento simultâneo e interativo de máquinas e dos elementos lógicos que gerenciam a execução automática de uma tarefa. 
As estruturas de dados, na maioria dos casos, adaptam as informações vistas no dia a dia para serem armazenadas e manipuladas nas máquinas. Elas diferem uma das outras pela disposição ou manipulação de seus dados e cada uma possui uma vantagem e desvantagem. O tipo de estrutura influencia na escolha do algoritmo para a solução do problema. 
Uma das tarefas mais comuns no dia a dia é a pesquisa de informação. Mas, a pesquisa depende muito da forma como a informação está organizada. Se a informação não estiver organizada não temos alternativa, infelizmente, que não seja percorrer todo o arranjo de informação por ordem seja ela do princípio para o fim ou vice-versa, até encontrar a desejada. Mas, se a informação estiver ordenada por uma ordem, seja ela crescente ou descrente no caso de informação numérica, ascendente ou descendente no caso de informação textual, a pesquisa pela informação seria mais simplificada. 
A Ordenação é uma tarefa muito importante no processamento de dados e é feita para facilitar a busca. 
Devido ao seu uso muito freqüente, é importante ter a disposição algoritmos de ordenação eficientes tanto em termos de tempo como em termos de espaço e processamento. 
Aqui abaixo estão alguns algoritmos de ordenação:
Selection Sort
A ordenação por seleção ou selection sort consiste em selecionar o menor item e colocar na primeira posição, selecionar o segundo menor item e colocar na segunda posição, segue estes passos até que reste um único elemento.
Quick Sort
O Algoritmo Quick sort é o método de ordenação interna mais rápido que se conhece para uma ampla variedade de situações. É um algoritmo de comparação que emprega a estratégia de "divisão e conquista". A ideia básica é dividir o problema de ordenar um conjunto com n itens em dois problemas menores. Os problemas menores são ordenados independentemente e os resultados são combinados para produzir a solução final.
Merge Sort
E um algoritmo de ordenação que faz uso da estratégia "dividir para conquistar" para resolver problemas. É um método estável e possui complexidade C(n) = O(n log n) para todos os casos.
Esse algoritmo divide o problema em pedaços menores, resolve cada pedaço e depois junta (merge) os resultados. O vetor será dividido em duas partes iguais, que serão cada uma divididas em duas partes, e assim até ficar um ou dois elementos cuja ordenação é trivial.
Para juntar as partes ordenadas os dois elementos de cada parte são separados e o menor deles é selecionado e retirado de sua parte. Em seguida os menores entre os restantes são comparados e assim se prossegue até juntar as partes.
Shell Sort
O método Shell Sort é uma extensão do algoritmo de ordenação por inserção. Ele permite a troca de registros distantes um do outro. A complexidade do algoritmo é desconhecida, ninguém ainda foi capaz de encontrar uma fórmula fechada para sua função de complexidade e o método não é estável.
Os itens separados de h posições (itens distantes) são ordenados: o elemento na posição x é comparado e trocado (caso satisfaça a condição de ordenação) com o elemento na posição x-h. Este processo repete até h=1, quando esta condição é satisfeita o algoritmo é equivalente ao método de inserção.
O presente trabalho busca contribuir para a sociedade cientifica mostrando gráficos e tabelas que relatam o desempenho de cada algoritmo e demonstrar uma análise eficiente que sirva de base para futuros desempenhos de ordenação. 
O trabalho intenciona esclarecer conceitos, funções e aplicações das técnicas de ordenação aos leigos. Para tanto, apresentando as técnicas mais usadas e conhecidas e analisando o desempenho das mesmas em certos cenários de desorganização. 
REFERENCIAL TEÓRICO
	A escolha de um método de ordenação deve – se, a necessidade a qual o software requer, disponibilizando-se de uma biblioteca já estabelecida, porém não fixa, ou seja, podem surgir várias outras, o desenvolvedor pode optar por diversas formas de ordenar. Porém alguns métodos são mais simples e outros mais complexos ou mais eficientes e menos eficientes.
	Existem vários desenvolvedores e criadores de métodos e lógicas, mas podemos colocar em destaque James Gosling, que agrega grande conhecimento e influência, assim como experiência, sendo referência na área tecnológica, ajudando a inovar e produzir novos conceitos.
	Ordenar corresponde ao processo de rearranjar um conjunto de objeto sem ordem ascendente ou descendente. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto ordenado. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto ordenado.
	Seungo Juliano Schimiguel professor da UCS, Problemas são questões propostas em busca de uma solução. Com o propósito de conceder uma solução para certo problema, existem os algoritmos, cada problema que é decidível possui um algoritmo que determina uma solução para cada instância desse problema.
	Algoritmos descrevem passo a passo os procedimentos para chegar a uma solução de um problema e podem ser representados de três formas:
	A forma de descrição narrativa, na qual se usa a linguagem nativa de quem escreve. Essa forma não segue um padrão definido e pode sofrer várias interpretações por quem lê;
	Outra forma de representar um algoritmo é o fluxograma, uma representação visual que utiliza símbolos que são figuras geométricas, cada uma com sua função específica. Essa representação, como o próprio nome diz, mostra o fluxo do algoritmo e também elimina as várias interpretações que a descrição narrativa permitia sobre um algoritmo;
	Por último, existe a linguagem algoritma (Pseudocódigo ou Portugol) que é a que mais se aproxima da estrutura de uma linguagem estruturada.
	Um tipo de algoritmo muito usado na resolução de problemas computacionais são os algoritmos de ordenação, que servem para ordenar/organizar uma lista de números ou palavras de acordo com a sua necessidade. As linguagens de programação já possuem métodos de ordenação, mas é bom saber como funcionam os algoritmos, pois há casos de problemas em que o algoritmo de ordenação genérico não resolve, às vezes é necessário modificá-lo.
	Os mais populares algoritmos de ordenação são: Insertion sort, Selection sort, Bubble sort, Comb sort, Quick sort, Merge sort, Heap sort e Shell sort. Neste artigo serão estudados os algoritmos Bubble sort, Selection Sort, Quick sort e o Insertion sort, explicando o funcionamento de cada um deles.
	Segundo ao curso escrito pela instituição de ensino Caelum, Hoje em dia,a grande maioria das pessoas utilizam a agenda do celular para armazenar seus contatos. As tarefas de uma agenda de contatos são basicamente duas:
1) Definir como as informações dos contatos serão armazenadas. Uma informação armazenada em algum
lugar (pedaço de papel, livro, computador, etc) é um dado.
2) Disponibilizar operações para criar, recuperar, ordenar, atualizar e remover contatos. Além de operações para informar o estado da agenda (a quantidade de contatos existentes na agenda ou a quantidade de espaço disponível para novos contatos).
	A primeira tarefa é crucial para o desempenho. Se a agenda armazena as informações de uma forma desorganizada então será muito mais complicado manipular os dados de forma e�ciente. A escolha de como guardar as informações deve levar em consideração as operações que serão disponibilizadas pela agenda. Por exemplo, seria interessante manter os contatos em ordem alfabética para facilitar a busca. 	
	Mas, apesar da importância de como os contatos são armazenados, a organização interna da agenda não precisa e não deve ser exposta ao usuário. A�nal de contas, o que o usuário deseja é usar a agenda através das operações e que tudo seja feito o mais rápido possível.
	A única coisa que precisa ser mostrada para o usuário são as operações que ele pode fazer na agenda (inserir, recuperar, atualizar, remover contato, saber quantos contatos estão na agenda, etc). Este conjunto de operações é a interface que o usuário tem com a agenda.
	Cada celular pode implementar a sua agenda de contatos de uma forma totalmente diferente um do outro, na tentativa de obter mais performance, ser mais con�ável ou gastar menos memória. Porém o conjunto básico de operações oferecidas pelas agendas é sempre o mesmo. Isso facilita a vida do usuário pois se ele tiver que trocar de celular não vai ter que aprender novamente como usar uma agenda de contatos.
Essa é a grande vantagem em se pensar em interface. Mantida a interface, podemos trocar uma agenda que não é tão e�ciente ou que já não atende mais as nossas necessidades por outra mais e�ciente ou adequada, sem problemas em ter de aprender a usar a nova agenda: troca-se a implementação, mas não mudamos a interface.
	Uma agenda de celular pode ser vista como uma estrutura de dados. Uma estrutura de dados mantém os dados organizados seguindo alguma lógica e disponibiliza operações para o usuário manipular os dados.
	É importante, quando programar, não misturar dado e estrutura de dados em uma coisa só. Um dado é uma informação armazenada e estrutura de dados é quem administra os dados. O ideal é que a estrutura de dados seja o mais independente possível dos dados que ela vai armazenar. Desta forma pode-se aproveitar a mesma estrutura de dados para diversos tipos de dados. Por exemplo, é melhor ter uma agenda genérica do que uma agenda de telefones. Uma agenda genérica pode ser utilizada para guardar telefones, ou emails, ou até mesmo guardar uma outra estrutura dentro dela: contatos, que seriam compostos por nome, telefone e email.
DESENVOLVIMENTO
A aplicação contém quatro classes e uma classe principal, sendo uma delas a “InterGrafica”, responsável por todo o corpo da interface gráfica da aplicação. Temos três classes responsáveis pelos algoritmos de ordenação, são: IS (responsável pelo Insertion Sort), BS (Responsável pelo Bubble Sort) e SS (Responsável pelo Selection Sort). E por último, a classe principal chamada “Main”, responsável por iniciar a aplicação.
INTERFACE GRÁFICA
A interface gráfica da aplicação é simples e sem grandes adereços, o que a torna de fácil manuseio. Foram usados os métodos da API Swing e AWT para desenvolvimento da aplicação. Alguns componentes comuns são os rótulos, os botões, os campos de texto, os container e etc. Do pacote Swing, estão presentes JLabel, JButton, JTextField, JFrame, JOptionPane; Do pacote AWT, estão presentes GridLayout, ActionListener, ActionEvent; E do pacote Util, somente o Random. 
OBTENÇÃO DE DADOS
A aplicação somente obtém dados de forma aleatória. Ao ser iniciada, abre-se uma interface gráfica simples e objetiva, que solicita ao usuário a quantidade de números que devem ser gerados aleatoriamente, abaixo, 4 botões (“Insertion Sort”, “Bubble Sort”, “Selection Sort” e “Créditos”), os três primeiros responsáveis por as suas respectivas ordenações e o 1 referente aos créditos do desenvolvedor.
A imagem abaixo ilustra o início aplicação.
A imagem abaixo mostra o código que gera a interface gráfica da aplicação.
A seguir, supondo que o usuário informe 10000 (dez mil) números a serem gerados, o mesmo poderá optar por 3 botões, o primeiro é o “Insertion Sort”, a sua direita, o “Bubble Sort”, e abaixo, o “Selection Sort”. Após clicar em quaisquer dos botões, começa o processo de geração de números randômicos, em seguida, o processo de ordenação do algoritmo de ordenação do respectivo botão. Após a geração e ordenação dos números, abre-se uma janela que informa o tempo que cada algoritmo leva para executar a sua ordenação, em milissegundos.
A imagem abaixo ilustra o clique no botão “Insertion Sort”.
A imagem abaixo ilustra o clique no botão “Bubble Sort”.
A imagem abaixo ilustra o clique no botão “Selection Sort”.
A imagem abaixo mostra o código responsável pelos eventos do clique em quaisquer dos botões e geração dos números randômicos.
GERAÇÃO DE DADOS
A geração de dados é iniciada após o clique de um dos três botões responsáveis também pelas ordenações. A aplicação gera números aleatórios, conforme a quantidade estipulada pelo usuário.
A imagem abaixo mostra o trecho de código responsável por gerar os números randômicos e passar os números gerados para o vetor que deverá ser ordenado.
ALGORITMOS DE ORDENAÇÃO
Algoritmo de ordenação coloca os elementos de uma dada sequência em uma certa ordem, efetuando sua ordenação completa ou parcial. O critério de ordenação fica a cargo do analista. 
No trabalho foi utilizado três algoritmos de ordenação, cada algoritmo tem sua própria classe: Bubble Sort, Selection Sort e Insertion Sort. 
BUBBLE SORT
O algoritmo Bubble Sort, ou ordenação por flutuação, é notavelmente lenta, mas é ela conceitualmente o mais simples dos algoritmos de ordenação. Pertence à classe de métodos baseados em permutação.
O primeiro passo é criar as variáveis que nos auxiliarão na ordenação dos valores. Um laço while() é criado e executado enquanto o valor de troca for true, e logo na primeira iteração já configuramos essa variável como false (você entenderá mais à frente o porquê).
O laço for percorre o primeiro elemento até o último elemento -1 (ele nunca chegará a ler o último elemento) verificando se o elemento atual que está sendo lido é maior que o próximo elemento que será lido.
A imagem abaixo é correspondente a classe “BS”, com o algoritmo do Bubble Sort implementado.
SELECTION SORT
O SelectionSort guarda a posição do menor elemento na variável “menor” e percorre o array procurando por um valor menor. Caso este valor seja encontrado então a variável “menor” recebe a posição deste valor. Por último é checado se a posição do menor elemento é diferente da posição atual, se isso for verdade então é feita uma troca de valores, colocando o menor elemento na frente. Começamos com o laço for, que percorre todos os elementos, guardando o valor da iteração atual na variável “fixo”. Em seguida usamos uma variável auxiliar chamada menor que guardará o valor de fixo.
A imagem abaixo é correspondente a classe “SS”, com o algoritmo do Selection Sort implementado.
INSERTION SORT
O algoritmo Insert Sort, ou ordenação por inserção direta, considera o primeiro elemento ordenado. O segundo elemento é inserido na sua posição correta em relação ao primeiro, resultando as duas primeiras posições ordenadas. A seguir, o terceiro elemento é inserido na sua posição correta em relação aos dois primeiros, resultando nas três primeiras posições ordenadas. E assim sucessivamente. Este irá percorrer todo o vetor começando do segundo elemento e atribuindoo mesmo a uma variável chamada key.
O algoritmo começa fazendo uma iteração em todos os elementos do vetor, a partir do segundo elemento, por isso “j=1” e não “j=0”.
A variável “key” armazena inicialmente o primeiro valor lido pelo laço for, que no caso será o segundo elemento do vetor. O segundo laço itera sobre os valores que estão antes da variável “key”.
A imagem abaixo é correspondente a classe “IS”, com o algoritmo do Insertion Sort implementado.
RESULTADOS E DISCUSSÃO
Nos testes da aplicação foi utilizado um Computador com processador Pentium® Dual-Core CPU E5300 @ 2.60GHz, memória RAM 2,00GB, sistema operacional Windows 7 x32. O software utilizado foi a IDE Eclipse Java Oxygen.
Foram feitos testes com todos os algoritmos de ordenação da seguinte forma: cada algoritmo foi testado 4 vezes seguidas, em seguida foram tirado as médias de cada um desses resultados, e no final, temos os seguintes resultados.
	 Valores
	 Insertion Sort
	 Bubble Sort
	 Selection Sort
	Mil
	1,75 ms
	4,25 ms
	3 ms
	Dez Mil
	95 ms
	370,25 ms
	239 ms
	Cem Mil
	9273 ms
	37402 ms
	23623,25 ms
	Quinhentos Mil
	48365 ms
	143608 ms
	90492 ms
Conforme o gráfico acima, o Bubble Sort foi o algoritmo que obteu o pior desempenho dentre os 3 algoritmos, seguido do Selection Sort. O Insertion Sort se mostrou ser o Algoritmo mais eficiente dentre os 3.
ANÁLISE SEPARADA
O Bubble Sort se mostrou ser o método menos eficiente em todos os testes, tanto com mil números, quanto com quinhentos mil números. O seu método é simples, porém, se mostra ineficaz a partir de uma certa quantidade excessiva de números. Sendo assim, o Bubble Sort, por ser simples, seria sim viável para programas e aplicações que não utilizassem uma variedade extensa de números.
Segue abaixo o gráfico de testes do Bubble Sort.
O Selection Sort se mostrou ser relativamente lento, entretanto, teve melhores resultados que o Bubble Sort, tanto com mil números, quanto com quinhentos mil números. O seu método também é simples e, apesar de apresentar uma certa lentidão em relação a uma quantidade excessiva de números, ainda assim ele se comportou de forma bem mais rápida que o Bubble Sort. Sendo assim, o Selection Sort seria viável para algumas aplicações e programas que utilizassem uma quantidade grande de números, entretanto, seria melhor optar por outros métodos para quantidades gigantescas de números.
Segue abaixo o gráfico de testes do Selection Sort.
O Insertion Sort foi o algoritmo mais veloz dentre os demais, superando-os com facilidade, tanto com mil números como com quinhentos mil números. O seu método se mostra rápido e muito eficaz com uma quantidade pequena de números, e consegue manter sua velocidade com relação a uma quantidade excessiva de números. Sendo assim, o Insertion Sort é eficaz tanto com poucos números com como muitos números.
Segue abaixo o gráfico de testes do Insertion Sort.
CONSIDERAÇÕES FINAIS
Este trabalho levantou os conceitos, aplicações e usos dos algoritmos de ordenação, mas especificamente, estudando os Bubble Sort, Select Sort e Insertion Sort. Diante de tudo que foi apresentado, conclui-se que a ordenação é um conceito totalmente necessário e importante nos meios de manipulação de informação que utilizamos hoje, já que há um crescente aumento na busca e atualização das mesmas. Dependendo do ambiente, algumas técnicas de ordenação se sobressaem em relação a outras, mas se o proprietário desejar ter uma velocidade de ordenação elevada terá que investir no ambiente em que a técnica de ordenação irá atuar.
REFERÊNCIAS BIBLIOGRÁFICAS
https://www.treinaweb.com.br/blog/conheca-os-principais-algoritmos-de-ordenacao/
https://www.ime.usp.br/~pf/algoritmos/aulas/ordena.html
https://www.embarcados.com.br/algoritmos-de-ordenacao-bubble-sort/
https://www.devmedia.com.br/algoritmos-de-ordenacao-em-java/32693
https://joaoschmitt.wordpress.com/2013/05/14/algoritmos-de-ordenacao-em-java/
http://www.kelvinsantiago.com.br/ordenacao-com-selection-sort-insertion-sort-bubble-sort-merge-sort-quick-sort-heap-sort-em-java/
http://ead.iesgo.edu.br/mod/resource/view.php?id=42
https://joaoschmitt.wordpress.com/2013/05/14/algoritmos-de-ordenacao-em-java/
https://www.dcc.fc.up.pt/~fds/aulas/EDados/1314/Apontamentos/ordenacao-1x2.pdf
http://www.rafaeltoledo.net/algoritmos-de-ordenacao-3/
 http://devfacil.blogspot.com.br/2014/04/algoritmo-ordenacao-bubble-sort.html
https://tiagomadeira.com/2006/01/ordenacao-por-insercao/
https://www.ime.usp.br/~leo/alg-ordenacao/
https://pt.stackoverflow.com/questions/188646/o-que-define-um-algoritmo-de-ordena%C3%A7%C3%A3o-est%C3%A1vel
http://professor.ufabc.edu.br/~jesus.mena/courses/bc0505-1q-2013/slides-aulas/teoria-semana09-01-ordenacao.pdf
https://imasters.com.br/artigo/13015/desenvolvimento/principais-algoritmos-de-ordenacao-de-dados/?trace=1519021197&source=single
CÓDIGO-FONTE DA APLICAÇÃO
CLASSE “InterGrafica”
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class InterGrafica extends JFrame implements ActionListener{
	private static final long serialVersionUID = 1L;
	private JTextField texto;
	private JButton IS,BS,SS, creditos;
	private JLabel label;
	private Random random;
	
	public void Interface() {
		setTitle("Ordenação de Dados");
		setSize(350,200);
		setLocation(50,50);
		getContentPane().setLayout(new GridLayout(3,2));
		label = new JLabel("Números:");
		IS = new JButton("Insertion Sort");
		IS.addActionListener(this);
		BS = new JButton("Bubble Sort");
		BS.addActionListener(this);
		SS = new JButton("Selection Sort");
		SS.addActionListener(this);
		creditos = new JButton("Créditos");
		creditos.addActionListener(this);
		texto = new JTextField();
		getContentPane().add(label);
		getContentPane().add(texto);
		getContentPane().add(IS);
		getContentPane().add(BS);
		getContentPane().add(SS);
		getContentPane().add(creditos);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		String quantidade = texto.getText();
		
		int[] vetor = new int[Integer.parseInt(quantidade)];
	 for (int i = 0; i < vetor.length; i++) {
	 	random = new Random();
	 	vetor [i] = random.nextInt(Integer.parseInt(quantidade));
	 }
		
		if(e.getSource()== IS) {
			IS is = new IS ();
			is.insertionSort(vetor);
		}
		if(e.getSource() == BS) {
			BS bs = new BS(); 
			long tempoinicial = System.currentTimeMillis();
			bs.bubbleSort(vetor);
			long tempofinal = System.currentTimeMillis();
	 long tempototal = tempofinal - tempoinicial;
	 JOptionPane.showMessageDialog(null, "BubbleSort: " + tempototal + " ms\n");
		}
		if(e.getSource() == SS) {
			SS ss = new SS();
			ss.selectionSort(vetor);
		}		
		if(e.getSource() == creditos) {
			JOptionPane.showMessageDialog(null, "Desenvolvido por Thiago Bindá\nAluno de Ciência da Computação\nInstituição UNIP - 4º semestre\2018 ");
		}
		
	}
	
}
CLASSE “IS”
import javax.swing.JOptionPane;
public class IS {
	
	public int[] insertionSort(int[] vetor) {
 int j;
 int key;
 int i;
 long tempoinicial = System.currentTimeMillis();
 for (j = 1; j < vetor.length; j++)
 {
 key = vetor[j];
 for (i = j - 1; (i >= 0) && (vetor[i] > key); i--)
 {
 vetor[i + 1] = vetor[i];
 }
 vetor[i + 1] = key;
 }
 long tempofinal = System.currentTimeMillis();
 long tempototal = tempofinal - tempoinicial;
 JOptionPane.showMessageDialog(null, "InsertionSort: " + tempototal + " ms\n");
 return vetor;
 }
}
CLASSE “BS”
public class BS {
	public int [] bubbleSort(int vetor[]){
 boolean troca = true;
 int aux;
 while (troca) {
 troca = false;
 for (int i = 0; i < vetor.length - 1; i++) {
 if (vetor[i]> vetor[i + 1]) {
 aux = vetor[i];
 vetor[i] = vetor[i + 1];
 vetor[i + 1] = aux;
 troca = true;
 }
 }
 }
 return vetor;
	}
}
CLASSE “SS”
import javax.swing.JOptionPane;
public class SS {
	public int[] selectionSort(int[] vetor) {
		 
		long tempoinicial = System.currentTimeMillis();
		for (int fixo = 0; fixo < vetor.length - 1; fixo++) {
		 int menor = fixo;
		 for (int i = menor + 1; i < vetor.length; i++) {
		 if (vetor[i] < vetor[menor]) {
		 menor = i;
		 }
		 }
		 if (menor != fixo) {
		 int t = vetor[fixo];
		 vetor[fixo] = vetor[menor];
		 vetor[menor] = t;
		 }
		 }
		 long tempofinal = System.currentTimeMillis();
		 long tempototal = tempofinal - tempoinicial;
		 JOptionPane.showMessageDialog(null, "SelectionSort: " + tempototal + " ms\n");
	 
		 return vetor;
		 }
}
CLASSE “MAIN”
import javax.swing.JFrame;
public class Main {
	public static void main(String[] args) {
		
		InterGrafica inter = new InterGrafica();
		inter.Interface();
		inter.setVisible(true);
		inter.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
Mil	Insertion	Bubble	Selection	1.75	4.25	3	Dez Mil	Insertion	Bubble	Selection	95	370.25	239	Cem Mil	Insertion	Bubble	Selection	9273	37402	23623.25	Quinhentos Mil	Insertion	Bubble	Selection	48365	113608	90492	
Mil	Bubble Sort	4.25	Dez Mil	Bubble Sort	370.25	Cem Mil	Bubble Sort	37402	Quinhentos Mil	Bubble Sort	143608	
Mil	Selection Sort	3	Dez Mil	Selection Sort	239	Cem Mil	Selection Sort	23623.25	Quinhentos Mil	Selection Sort	90492	
Mil 	Insertion Sort	1.75	Dez Mil	Insertion Sort	95	Cem Mil	Insertion Sort	9270	Quinhentos Mil	Insertion Sort	48635

Outros materiais