Site hosted by Angelfire.com: Build your free website today!


El metodo de la burbuja es uno de los mas simples, es tan facil como comparar todos los elementos de una lista contra todos, si se cumple que uno es mayor o menor a otro, entonces los intercambia de posición.


Por ejemeplo, imaginemos que tenemos los siguientes valores:
5 6 1 0 3
Lo que haria una burbuja simple, seria comenzar recorriendo los valores de izq. a derecha, comenzando por el 5. Lo compara con el 6, con el 1, con el 0 y con el 3, si es mayor o menor (dependiendo si el orden es ascendiente o descendiente) se intercambian de posicion. Luego continua con el siguiente, con el 6, y lo compara con todos los elementos de la lista, esperando ver si se cumple o no la misma condicion que con el primer elemento. Asi, sucesivamente, hasta el ultimo elemento de la lista.

BURBUJA SIMPLE
Como lo describimos en el item anterior, la burbuja mas simple de todas es la que compara todos con todos, generando comparaciones extras, por ejemplo, no tiene sentido que se compare con sigo mismo o que se compare con los valores anteriores a el, ya que supuestamente, ya estan ordenados.
 for (i=1; i<LIMITE; i++)
     for j=0 ; j<LIMITE - 1; j++)
           if (vector[j] > vector[j+1])
                temp = vector[j];
                vector[j] = vector[j+1];
                vector[j+1] = temp;

BURBUJA MEJORADA
Una nueva version del metodo de la burbuja seria limitando el numero de comparaciones, dijimos que era inutil que se compare consigo misma. Si tenemos una lista de 10.000 elementos, entonces son 10.000 comparaciones que estan sobrando. Imaginemos si tenemos 1.000.000 de elementos. El metodo seria mucho mas optimo con “n” comparaciones menos (n = total de elementos)

BURBUJA OPTIMIZADA
Si al cambio anterior (el de la burbuja mejorada) le sumamos otro cambio, el hecho que los elementos que estan detrás del que se esta comparando, ya estan ordenados, las comparaciones serian aun menos y el metodo seria aun mas efectivo.Si tenemos una lista de 10 elementos y estamos analizando el quinto elemento, que sentido tiene que el quinto se compare con el primero, el segundo o el tercero, si supuestamente, ya estan ordenados? Entonces optimizamos mas aun el algoritmo, quedando nuestra version final del algoritmo optimizado de la siguiente manera:


Bubblesort(int matriz[])
        {
                int buffer;
                int i,j;
                for(i = 0; i < matriz.length; i++)
                {
                        for(j = 0; j < i; j++)
                        {
                                if(matriz[i] < matriz[j])
                                {
                                        buffer = matriz[j];
                                        matriz[j] = matriz[i];
                                        matriz[i] = buffer;
                                }
                        }
                }
        }
package metodosOrdenamiento;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Burbuja extends JPanel implements ActionListener{
private static final long serialVersionUID = 8865647787011721299L;   
int aux,n;
int tabla[];
String res;
JTextArea sal;
JPanel bot;
JButton introducir,mostrar;
public Burbuja(){
setLayout(new BorderLayout());   
n=6;
tabla=new int[n];
aux=0;
interfaz();
}
public void interfaz(){
//antes aqui iva el setLayout()   
sal=new JTextArea(15,35);
sal.setBorder(BorderFactory.createTitledBorder("     ordenamiento burbuja     "));
sal.setEditable(false);
bot=new JPanel();
bot.setLayout(new GridLayout(2,0));
introducir=new JButton("Introducir");
introducir.setBackground(Color.BLACK);
introducir.setForeground(Color.WHITE);
introducir.addActionListener(this);
mostrar=new JButton("Mostrar");
mostrar.setBackground(Color.BLACK);
mostrar.setForeground(Color.WHITE);
mostrar.addActionListener(this);
bot.add(introducir);
bot.add(mostrar);
add(sal,BorderLayout.CENTER);
add(bot,BorderLayout.EAST);
}
public void vector(){
for(int i=0;i<tabla.length;i++){
try{
tabla[i]=Integer.parseInt
(JOptionPane.showInputDialog(null,"introduce un numero","metodo burbuja"
,JOptionPane.INFORMATION_MESSAGE));   
}catch(Exception e){
JOptionPane.showMessageDialog(null,"introduce un valor numerico"
,"Error",JOptionPane.ERROR_MESSAGE);   
}
}
}
public void burbuja(){
for(int i=0;i<tabla.length-1;i++){   
for(int j=i+1;j<tabla.length;j++){
if (tabla[i]>tabla[j]){   
aux=tabla[j];
tabla[j]=tabla[i];
tabla[i]=aux;
}
}
}
}
public void print(){
for(int i=0;i<tabla.length;i++){
sal.append(" " + tabla[i] + "  " + "  ");   
}
JOptionPane.showMessageDialog(null,sal,"ordenacion::",
JOptionPane.PLAIN_MESSAGE);
}
public void actionPerformed(ActionEvent ev){
if(ev.getSource()==introducir){
sal.setText( " " );
vector();
System.out.println("fase 1");
}
if(ev.getSource()==mostrar){
int i;   
sal.append("antes de ordenar:" + "\n");
for( i=0;i<tabla.length;i++){
sal.append(" " + tabla[i] + "  " + " " ) ;
}
sal.append("\n" + "\n");
sal.append("despues de ordenar:" + "\n");
burbuja();
for( i=0;i<tabla.length;i++){
sal.append(" " + tabla[i] + "  " + " " ) ;
}   
}
}//fin actionPerformed
}//fin clase