Ordenar Por Bubble com Array

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Ordenar Por Bubble com Array

Mensagem por Leon Dias em Qui 18 Jul 2013, 8:34 pm

Este algoritmo permite a ordenação de elementos de uma lista, este exemplo de ordenar por bubble com vetor é um dos mais clássicos,
com a ideia dele implementei um algoritmo semelhante numa estrutura minha de lista duplamente encadeada, a diferença é que nesse estrutura
não existe um elemento de um tipo único(que é o caso do exemplo a seguir), na lista duplamente encadeada os elementos contidos nela são do tipo Object, ou seja, não existe uma instrução por comparação como a de um número inteiro (<: menor, >maior, ==: igual), na Lista Duplamente encadeada existem objetos com atributos que podem ser de um a N atributos, ou seja, precisa-se saber o que comparar, e no caso se esse elemento for um do tipo String, deve ser usado o compareTo, o método ordenarPorBubble numa lista duplamente encadeada será apresentado em outro post, este serve como base e também para melhor compreendimento de estruturas e seus elementos internos, novamente explico que nesse exemplo vou usar um vetor comum,
com elementos inteiros, estes elementos estarão fora de ordem, e cabe ao algoritmo ordená-lo,

Primeiramente vou postar o método main com todo o algoritmo a seguir:


Código:
public static void main(String[] args) {
      
      int[] vet= {2, 3, 1, 5, 8};
      
      System.out.println("Antes de ordenado: ");
      
      for (int i = 0; i < vet.length; i++) {
         
         System.out.print(vet[i] +" ");
         
      }
      
      for (int i = 0; i < vet.length; i++) {
         for (int j = i+1; j < vet.length; j++) {
            
            if(vet[i]<vet[j]){
               
               int aux = vet[i];
               vet[i]= vet[j];
               vet[j] = aux;
            }
         }
      }
      
      System.out.println("\n\nDepois de ordenado: ");
      
      for (int i = 0; i < vet.length; i++) {
         
         System.out.print(vet[i] +" ");
         
      }
      

   }

Explicando o algoritmo:

Primeiramente deve-se declarar o vetor, neste exemplo eu já inseri todos os elementos no mesmo, ou seja, o vetor ou array já foi inicializado:

Código:
int[] vet= {2, 3, 1, 5, 8};


Em seguida faço comandos para mostrar no console como está a estrutura sem estar ordenada, mostrando todos seus elementos internos desordenados:

Código:
System.out.println("Antes de ordenado: ");
      
      for (int i = 0; i < vet.length; i++) {
         
         System.out.print(vet[i] +" ");
         
      }

Agora sim vem o algoritmo, primeiramente faço um for que percorre todas as posições do array, existem uma
variável de índice (int i), que começa em 0 e vai até ser menor do que o .length (length significa total de elementos de uma lista, em português comprimento), depois é feito mais um laço de for, dessa vez este tem outra variável de índice (int j), que começa com o valor de i+1, ou seja,
ela vai receber o índice posterior ao índice i, esta também vai terminar no .length e, assim como o índice i, este também irá incrementar, (j++).

Dentro dos dois laços:

   Feito os dois laços de for, é feita o comando de seleção if, ele testa se o elemento que está na posição i é maior do que tá na posição j;
caso sim, ocorre um Swap(troca), da qual uma variável auxiliar recebe o valor da posição i (vet[i]), o valor da posição i(vet[i]) vai receber o valor
da posição j(vet[j]), o valor da posição j tem que receber o valor da posição i para ser concretizada a troca, mas como o valor da posição i já trocou o seu valor (lembre que ele recebeu o valor da posição j), o valor da posição j vai receber o valor da variável auxiliar (lembre que a variável auxiliar recebeu o valor da posição i).

Mostrando o algoritmo de troca:

Código:
int aux = vet[i];
   vet[i]= vet[j];
   vet[j] = aux;

Logo depois da execução desse algoritmo mostro no console a lista de forma ordenada:

Código:
   System.out.println("\n\nDepois de ordenado: ");
      
      for (int i = 0; i < vet.length; i++) {
         
         System.out.print(vet[i] +" ");
         
      }

O que acontece dentro do algoritmo que ordena por bubble?

imagine a seguinte estrutura com esses elementos:

{2, 3, 1, 5, 8}

veja os dois primeiros elementos: 2 e 3;
2 é menor do que 3?
sim
então na posição em que estava o 3 o valor será trocado para 2 e ma posição em que está o 2 será trocado para o valor 2,
ficando assim: 3, 2

agora veja os próximos elementos 2 e 1
dois é menor do que 1?
não
então não ocorre a troca



Esse algoritmo vai percorrer todos os elementos do array;

o resultado que sairá no console será esse:
8 5 3 2 1,

Os valores estão ordenados, porém em ordem decrescente,
se quiseres fazer em ordem crescente é só modificar o algoritmo de troca.



Muito obrigado colegas e programadores, espero que essa postagem tenha sido útil,
grande abraço,


Última edição por Leon Dias em Sex 19 Jul 2013, 1:26 am, editado 6 vez(es)

_________________
Leon Dias Vieira
Administrador do Fórum.
avatar
Leon Dias
YOTTABYTE
YOTTABYTE

Mensagens : 9
Reputação : 9
Data de inscrição : 14/07/2013
Idade : 27
Localização : Porto Alegre

Voltar ao Topo Ir em baixo

Re: Ordenar Por Bubble com Array

Mensagem por andreirs em Qui 18 Jul 2013, 8:57 pm

Gostei da postagem, ficou bem explicado.. Tenho certeza que bastante gente fica em dúvida a respeito deste método, mas ainda há uma forma mais rápida de se fazer. Se o teste for feito do fim para o início, você poupará uma volta na repetição.
EXEMPLO 1:
Do fim para o início:
Código:
241653
234165
123456
Do início para o fim:
Código:
241653
214536
124356
123456
EXEMPLO 2:
Do fim para o início:
Código:
54831
15483
13548
13458
Do início para o fim:
Código:
54831
45318
43158
31458
13458

Obs.: Cuidado com a postagem dupla.

_________________
/**
* @author Ândrei
* @title YottaByte
*/

http://codigomestre.forumbrasil.net/
avatar
andreirs
YOTTABYTE
YOTTABYTE

Mensagens : 33
Reputação : 8
Data de inscrição : 14/07/2013
Idade : 24
Localização : Porto Alegre

Voltar ao Topo Ir em baixo

Re: Ordenar Por Bubble com Array

Mensagem por brunolpw em Qui 18 Jul 2013, 10:24 pm

Leon, remove o vídeo e adiciona ele no tópico para não fazer double post.
Agora, com relação ao tópico mesmo, muito bom, bem explicado e organizado, valeu bastante, marquei + ali pra ti Wink

_________________


/**
* @author Bruno La Porta.
* @title  YottaByte.
* */

/* Life rum on code. */


http://codigomestre.forumbrasil.net/

.:: Amigurumi Life ::.
Por Liz Camargo
avatar
brunolpw
YOTTABYTE
YOTTABYTE

Mensagens : 33
Reputação : 14
Data de inscrição : 14/07/2013
Idade : 27
Localização : Brasil - RS - Porto Alegre

http://codigomestre.forumbrasil.net

Voltar ao Topo Ir em baixo

Re: Ordenar Por Bubble com Array

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum