Ordenação de Bolha

Bom dia Comunidade

Poderiam , me ajudar com esse código , ele imprime 5 vetores aleatório , porem eu quero que na saída ele mostre a ordenação crescente do mesmo , esse algoritmo mostra os numeros gerados , porem não ordenam eles no final

package bubblesort;

import java.util.Random;

public class BubbleSort {

    public static void main(String[] args) {
        int i;
        long inicio;
        long fim;
        //double tempo;
        int[] vetor = new int[5]; // AQUI é a quantidade de Vetores 
        int intervaloInicial = 0;
        int intervaloFinal = 10; // Numeros a ser gerados , o limite no caso 
        for (i = 0; i < vetor.length; i++) {
            vetor[i] = getRandomNumberRange(intervaloInicial, intervaloFinal);
            System.out.println(vetor[i]);
        }
        //BubbleSort
        System.out.println("--BubbleSort--");
        inicio = System.currentTimeMillis();
        bubbleSort(vetor);
        fim = System.currentTimeMillis();
        System.out.printf("%.3f ms%n", (fim - inicio) / 5d); // AQUI 
    }

    private static int getRandomNumberRange(int min, int max) {
        Random r = new Random();
        return r.ints(min, (max + 1)).limit(1).findFirst().getAsInt();
    }

    public static void bubbleSort(int[] a) {
        if (a == null) {
            throw new NullPointerException("The array doesn't exist.");
        }
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - i - 1; j++) {
                if (a[j] > a[j + 1]) {
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }
}

Veja o pseudocódigo: Bubblesort (Ordenação por Troca) - a partir da página 13.

To tentando aqui ,usei isso e não deu certo

 System.out.println("Vetor organizado:");
            for (i = 0; i < 100; i++) {
                int[] vetor = null;
                System.out.println(" " + vetor[i]);
            }

Você não consegue ‘traduzir’ o pseudocódigo para Java? Lá tem dois para (for), no seu só tem um, lá tem variável auxiliar, não vi nada disso no seu código. Veja com um pouco mais de atenção, que vais conseguir resolver.
Eu não deveria, mas vou ‘mastigar’ para você:

/*
*(1)procedimento BubbleSort(A : tabela, N: inteiro)
(2) para j → 1 até N-1 faça
(3) para i → 1 até N-1 faça
(4) se A[i] > A[i+1] então
(5) aux → A[i];
(6) A[i] → A[i+1];
(7) A[i+1] → aux;
(8) fim-se
(9) fim-para
(10) fim-para
*/

import java.util.Random;

public class BubbleSort {
	final int FATOR_ESCALA = 10;
	final int DESLOCAMENTO = 1;
	int[] vetorDados = new int[FATOR_ESCALA];

	private void gerarDados(){
		Random random = new Random();
		
		for(short i = 0; i < FATOR_ESCALA; i++){
			vetorDados[i] = DESLOCAMENTO + random.nextInt(FATOR_ESCALA);
		}
	}
	
	private void exibirDados(){
		for(short i = 0; i < FATOR_ESCALA; i++){
			System.out.print(vetorDados[i] + " ");
		}
	}
	
	public void ordenador(){
		int auxiliar;
		int contador = 0;
		
		for(short j = 0; j < FATOR_ESCALA; j++){ //para j → 1 até N-1 faça
			for(short i = 0; i < FATOR_ESCALA; i++){ //para i → 1 até N-1 faça
				contador += 1; //i + 1
				
				if(contador < (FATOR_ESCALA)){ // verifica se já não atingiu o penúltimo
					if(vetorDados[i] > vetorDados[contador]){ //se A[i] > A[i+1] então
						auxiliar = vetorDados[i]; //aux → A[i];
						vetorDados[i] = vetorDados[contador]; //A[i] → A[i+1];
						vetorDados[contador] = auxiliar; //A[i+1] → aux;
					}
				}
			}
			contador = 0; //reinicia o contador
		}
	}
	
	public static void main(String[] args){
		BubbleSort ordenacaoBolha = new BubbleSort();
		ordenacaoBolha.gerarDados();
		ordenacaoBolha.exibirDados();
		ordenacaoBolha.ordenador();
		System.out.println("\n");
		ordenacaoBolha.exibirDados();
	}
}

image

1 curtida

Obrigado, é que estou vendo isso agr na faculdade , e estava querendo entender como funcionava , mas vlw , vou continuar estudando aqui

Faz um teste de mesa que você vai identificar rapidinho o que há de errado no seu algoritmo.

Complementando a sugestão do @staroski, uma aula de Teste de Mesa: Teste de Mesa = emular no papel.

Eu fiz aqui , e consegui identificar os meus erros , ainda mais com a solução do @Jothar_Aleksander ,obg gente