Usando for pra organizar vetor com Bubble Sort

5 respostas
java
MontanhaAlta

Pra que usar dois for um dentro do outro para organizar vetor com Bubble Sort?

5 Respostas

davidbuzatto
  1. Pegue uma folha de papel;
  2. Escreva uns 5 números, um ao lado do outro, digamos 7, 4, 8, 1, 3.
  3. Pense num algoritmo para colocá-los em ordem, comparando os valores;
  4. Fique atento ao que você está pensando e tente generalizar o processo;
  5. Se você conseguir, você vai chegar em um desses três algoritmos: Selection sort, Insertion sort ou Bubble sort. Os três são algoritmos simples, não muito eficientes, mas que resolvem esse problema;
  6. Ao fazer esse exercício mental, você mesmo deverá ser capaz de explicar o motivo de precisar de dois fors para resolver esse problema.
MontanhaAlta

Ok.

É por que ele vai comparar todos valores em dois em dois até que esteja ordenado em ordem crescente cinco vezes?

davidbuzatto

A cada passada é garantido que o maior elemento estará no final ou o menor no início, dependendo de como vc está implementando.

Dessa forma, depois da primeira passada do for mais externo, 8 vai estar na última posição:

int[] array = { 7, 4, 8, 1, 3 };

for ( int i = 0; i < array.length; i++ ) {
    for ( int j = 0; j < array.length - i - 1; j++ ) {
        if ( array[j] > array[j+1] ) {
            int t = array[j];
            array[j] = array[j+1];
            array[j+1] = t;
        }
    }
}

E dessa forma, depois da primeira passada do for mais externo, 1 vai estar na primeira posição:

int[] array = { 7, 4, 8, 1, 3 };

for ( int i = 0; i < array.length; i++ ) {
    for ( int j = array.length - 1; j > i; j-- ) {
        if ( array[j] < array[j-1] ) {
            int t = array[j];
            array[j] = array[j-1];
            array[j-1] = t;
        }
    }
}

Há várias outras formas de implementar o bubble sort, todas variações dessas que passei. Você pode inclusive parar o for mais externo se não houver nenhuma troca no for mais interno:

boolean trocou;
int[] array = { 7, 4, 8, 1, 3 };

for ( int i = 0; i < array.length; i++ ) {
    trocou = false;
    for ( int j = 0; j < array.length - i - 1; j++ ) {
        if ( array[j] > array[j+1] ) {
            int t = array[j];
            array[j] = array[j+1];
            array[j+1] = t;
            trocou = true;
        }
    }
    if ( !trocou ) {
        break;
    }
}

Não testei nenhum dos três exemplos.

MontanhaAlta

Mas muitas vezes não precisa percorrer cinco vezes pra organizar todo vetor, né?

davidbuzatto

Depende dos dados. Seu computador consegue adivinhar quando não precisa?

Criado 21 de novembro de 2025
Ultima resposta 24 de nov. de 2025
Respostas 5
Participantes 2