Bubble sort

10 respostas
F

bom galera é simples mas é foda to apanhando pra fazer uma porcaria de metodo bolha ta dando erro não de sintaxe é erro de logica alguem pode me ajudar? desde já agradeço

public class bolha{
	
	
	public static void main (String args[])
	{
		int []vet={5,4,3,2,1,0};
		int aux=0;	
		
	for(int i=0;i<6;i++)
		{
			for(int j=0;j<6;j++)
			{
				if(vet[j]>vet[j+1])
				{
					aux=vet[j];
					vet[j]=vet[j+1];
					vet[j+1]=aux;
				}
					
			}
			
		}
	}
	
}

10 Respostas

P

Sinceramente, não entendi o porquê do primeiro laço. Tente o seguinte:

public class Bolha{   
       
       
    public static void main (String[] args){   

        boolean ordenado;
        int[] vet={5,4,3,2,1,0};   
        int aux=0;     
           
    while(!ordenado){

            ordenado = true;
   
            for(int j=0;j<5;j++){
   
                if(vet[j]>vet[j+1]){
   
                    aux=vet[j];   
                    vet[j]=vet[j+1];   
                    vet[j+1]=aux;

                    ordenado = false;
                }   
                       
            }   
               
        }   
    }   
       
}
F

desta forma nem compila da erro direto

Mantu

http://www.guj.com.br/posts/list/56135.java#294844

R

pra q isso serve cara?
so pra eu entender a logica

felipemartinsss
public void bubbleSort() {
		for (int i = 0; i < vet.length; i++) {
			for (int j = i + 1; j < vet.length; j++) {
				if (vet[i] > vet[j]) {
					aux = vet[j];
					vet[j] = vet[i];
					vet[i] = aux;
			        }

		       }
	     }
}

Pesquise sobre os métodos de ordenação, o mais simples deles é esse Bolha. Mais conhecido como BubbleSort. A idéia é mover o elemento maior através de comparações até a última posição do vetor.
Ou fazer o processo inverso, procurar pelo menor e trazê-lo até o início.

F

eu entendo perfeitamente a logica não to conseguindo é aplicar a logica não sei pq, ta retornando um erro

java.lang.arrayindexoutofboundsexception 6

L

Mano, quando vc faz: for(int j=0;j<5;j++) vc determina que J tem que ir até a última linha do array. Quando chega na última, o tal do if(vet[j]>vet[j+1]) tenta chegar a uma posição do vetor que não existe (vet[5]). Então, faça o for até 4 só, e não até o 5. Ele vai comparar, ver se o último é menor ou maior, ordenar e sair do bloco. Simples assim.

francislon

Não, basta você delimitar o seu for interno fazendo o seguinte:

for (int i = 0; i < vet.length; i++) {  
             for (int j = 0; j < ( vet.legth - 1 ); j++) {  
                 if (vet[j] > vet[j+1]) {  
                     aux = vet[j];  
                     vet[j] = vet[j+1];  
                     vet[j+1] = aux;  
                     }  
   
                }  
          }
F

consegui corrigir eu tinha colocado um for(int i=0;i<6;i++) e não tinha esta posição no vetor eu poderia ter usado um vet.length como o pessoal sugeriu ai tb problema resolvido.
muito obrigado a todos

public class bolha{   
       
       
    public static void main (String args[])   
    {   
        int []vet={5,4,3,2,1,0};   
        int aux=0;     
           
    for(int i=0;i<5;i++)   
        {   
            for(int j=0;j<5;j++)   
            {   
                if(vet[j]>vet[j+1])   
                {   
                    aux=vet[j];   
                    vet[j]=vet[j+1];   
                    vet[j+1]=aux;   
                }   
                       
            }   
               
        }  
        
        for(int i=0;i<6;i++)
        {
        	System.out.println(vet[i]);
        } 
    }   
       
}
thassiano

Dá uma olhada na página: http://pt.wikipedia.org/wiki/Bubble_sort

Criado 11 de março de 2008
Ultima resposta 11 de mar. de 2008
Respostas 10
Participantes 8