Ordenar Por Bubble com Array
3 participantes
Código Mestre :: Programação :: Java
Página 1 de 1
Ordenar Por Bubble com Array
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:
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:
Em seguida faço comandos para mostrar no console como está a estrutura sem estar ordenada, mostrando todos seus elementos internos desordenados:
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:
Logo depois da execução desse algoritmo mostro no console a lista de forma ordenada:
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,
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- YOTTABYTE
- Mensagens : 9
Reputação : 9
Data de inscrição : 14/07/2013
Idade : 35
Localização : Porto Alegre
Re: Ordenar Por Bubble com Array
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.
Obs.: Cuidado com a postagem dupla.
- EXEMPLO 1:
- Do fim para o início:
- Código:
241653
234165
123456
- Código:
241653
214536
124356
123456
- EXEMPLO 2:
- Do fim para o início:
- Código:
54831
15483
13548
13458
- Código:
54831
45318
43158
31458
13458
andreirs- YOTTABYTE
- Mensagens : 33
Reputação : 8
Data de inscrição : 14/07/2013
Idade : 31
Localização : Porto Alegre
Re: Ordenar Por Bubble com Array
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
Agora, com relação ao tópico mesmo, muito bom, bem explicado e organizado, valeu bastante, marquei + ali pra ti
Código Mestre :: Programação :: Java
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|