21/12/09

Metodo de la burbuja (bubble sort java)

Este metodo nos permite ordenar ascendentemente los elementos de una lista , se comienza comparando los dos primeros elementos  y si el valor del primer elemento es mayor que el segundo  entonces se intercambian valores. Luego se procede  de la misma manera con el segundo y tercer elemento, posteriormente con el tercer y cuarto elemento y asi sucesivamente hasta llegar al ultimo par de elementos, de esta manera en el ultimo elemento siempre queda el mayor valor de la lista.Por lo tanto el ultimo elemento de la lista siempre queda con el valor correcto, el mayor.

Si se quiere ordenar una lista descendentemente, entonces se aplica el mismo procedimiento, solo que ahora al comparar se pregunta si el valor  del primer elemento es menor que el segundo.
Nuestra clase se llama burbuja.java y contiene el metodo ordenar asi como un metodo para imprimir la lista.

/**
 * @web http://jc-mouse.blogspot.com/
 * @author mouse
 */

public class burbuja {
    int[] vector ;
    int elementos=0;
    boolean bandera=true;
    
    public burbuja (int[] v){
        this.vector=v;
    }    

    public int[] ordenar(){
        int p1;
        int p2;        
        int y=0;
        bandera=true;
        elementos = vector.length;
        while((elementos > 1) && (bandera==true) )
        {
            y=0;
            p1 = vector[y];
            p2 = vector[y+1];
            elementos--;
            bandera=false;
            for(int i=0; i < elementos; i++){                                
                if (p1>p2){                   
                    vector[i]=p2;
                    vector[i+1]=p1;
                    bandera=true;                      
                }//fin de si         
                System.out.println("ordenando: "+ Mostrar(vector));
                y++;
                if (y < elementos){                    
                    p1 = vector[y];
                    p2 = vector[y+1];                
                }                    
            }//fin for                       
        }//fin de mientras
        return vector;
    }
    //para imprimir el array
    public String Mostrar(int[] v){
        String s=" | ";
        for (int i=0; i < v.length; i++){
            s += v[i] + " | ";
        }
        return s;
    }    
}

Para implementar esta clase, el main debe contener el siguiente codigo:


public class Main {  
   
    public static void main(String[] args) {         
        //creamos un array y llenamos este con numeros al azar
        int[] c = null ;        
        c = generarlista(5);        
        //creamos el objeto burbuja y mostramos
        burbuja b = new burbuja(c);                
        System.out.println("ORIGINAL : "+ b.Mostrar(c));        
        System.out.println("ORDENADO : "+ b.Mostrar(b.ordenar()));
        
    }
    //genera un array de n elementos
    public static int[] generarlista(int n){        
        int[] v = new int[n];
        Random rand = new Random();
        for (int i=0; i<v.length; i++){
            v[i]=rand.nextInt(1000);
        }   
        return v;
    }    
}

Aparte se tiene un metodo para generar un array de enteros "generarlista()" el cual utiliza un random para llenar un array con "n" numeros enteros. este metodo nos sirve para realizar la prueba mas facilmente.
Como se puede observar en el resultado este metodo no es eficiente, ya que el tiempo requerido para ordenar listas grandes se incrementa geometricamente, razon por la cual solo resulta de utilizad para ordenar listas pequeñas (ni se te ocurra probar este algoritmo con un 1000000 de elementos), ademas otra desventaja que presenta es el de no tener un parametro de control que nos indique que la lista ya esta ordenana (incluso si la lista esta ordenada desde el principio), el procedimiento se llevara a cabo n-1 veces.

4 comentarios:

  1. Excelente explicación Muchas Gracias :)

    ResponderEliminar
  2. Les recomiendo esta pagina, puede ser de mucha utilidad

    http://java-elrincondetucasa.blogspot.mx

    ResponderEliminar
  3. me podrias mandar el codiigo

    ResponderEliminar