noviembre 10, 2011

Método de la Burbuja en JAVA

La Ordenación de burbuja (Bubble Sort en inglés) es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeñas "burbujas". También es conocido como el método del intercambio directo. Dado que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparación, siendo el más sencillo de implementar.
Descripción:
Una manera simple de expresar el ordenamiento de burbuja en pseudocódigo es la siguiente:
Este algoritmo realiza el ordenamiento de una lista a de n valores, en este caso de n términos numerados del 0 al n-1, consta de dos bucles anidados uno con el índice i, que da un tamaño menor al recorrido de la burbuja en sentido inverso de 2 a n, y un segundo bucle con el índice j, con un recorrido desde 0 hasta n-i, para cada iteración del primer bucle, que indica el lugar de la burbuja.
La burbuja son dos términos de la lista seguidos, j y j+1, que se comparan, si el primero es menor que el segundo sus valores se intercambian.
Esta comparación se repite en el centro de los dos bucles, dando lugar a la postre a una lista ordenada, puede verse que el número de repeticiones sola depende de n, y no del orden de los términos, esto es, si pasamos al algoritmo una lista ya ordenada, realizara todas las comparaciones exactamente igual que para una lista no ordenada, esta es una característica de este algoritmo.
El algoritmo del método es el siguiente:

/**
 * Archivo: MetodoDeLaBurbuja.java
 * @author Bello Cerecero
 * @version 1.0
 * @since 10/11/2011
 */
public class MetodoDeLaBurbuja 
{
    public static int[] burbuja(int[] arreglo)
    {
      int auxiliar;
      int[] arregloOrdenado;
      for(int i = 2; i < arreglo.length; i++)
      {
        for(int j = 0;j < arreglo.length-i;j++)
        {
          if(arreglo[j] > arreglo[j+1])
          {
            auxiliar = arreglo[j];
            arreglo[j] = arreglo[j+1];
            arreglo[j+1] = auxiliar;
          }   
        }
      }
      arregloOrdenado = arreglo;
      return arregloOrdenado;
    }
    
    public static void main(String[] args) 
    {
      //Valores que tiene el arreglo desordenado.
      int arreglo[] = {8,6,7,2,1,8,6,8,7,1,9,7,7,10};
      int arregloOrdenado[] = burbuja(arreglo);
 
      //imprimimos el arreglo ordenado.
      for(int i = 0; i < arregloOrdenado.length;i++)
        System.out.println(arregloOrdenado[i]);
    }
}

28 comentarios:

  1. me ayudo a entender esta metodo grax

    ResponderBorrar
  2. Odio todo lo que tenga que ver con programación, pero me ayudo a hacer la tarea

    ResponderBorrar
    Respuestas
    1. tas bien pendejo jeremy V:

      Borrar
    2. Este comentario ha sido eliminado por el autor.

      Borrar
    3. Entiendo, Isaa Aquino, yo igual odiaba cuando me pusieron a programar en C++, luego con java y unity me interesó. Es entendible que una persona odie la programación, más si tu carrera es distinta y A HUEVO quieren enseñarte programacion. Claro que te van a maldecir los fanboy de programación, pero aquí tienes un cibernetico que la odió...

      Borrar
  3. Lo que no entiendo es porque se usan dos for y no uno??

    ResponderBorrar
    Respuestas
    1. porque uno recorre la matriz verticalmente y otro horizontalmente

      Borrar
    2. por que es para verificar cada elemento. Me explico, evaluaras el primer elemento con todos los siguientes y luego avanzas al siguiente y lo evalúas con el resto sobrante, hasta terminar con todo el arreglo

      Borrar
  4. Me podría ayudar con este problema

    realizar un programa el cual pida dos vectores de 5 posiciones cada uno y posterior a ello compararlos. Deberá de mostrar si los vectores son iguales.

    ResponderBorrar
  5. Respuestas
    1. de echo con numero 2 solo ordena con numeros 23 23 23 y con 23 23 2 fallaría

      Borrar
    2. para compararlo con el valor anterior, es decir compara el valor de i1 con i2

      Borrar
    3. De hecho debería de ser i=1, porque si i=2, sería como presumir que los arreglos menores a tres elementos ya están ordenados. Tal cual lo menciona Sam. En otras palabras le falta una iteración con i=2 que sólo es visible cuando son arreglos de tres o menores. En otras palabras si el arreglo original es de dos elementos, no realiza ninguna comparación, si es de tres sólo realiza la primera.

      Borrar
  6. ola, tenguo una pregunta: ko se asia heso¿¿

    ResponderBorrar
    Respuestas
    1. hola hamijo, la teacher de filosofia me dijo que nada es real, asi que no te esfuerces

      Borrar
    2. ha bale. Entonses estoi trankilo

      Borrar
    3. Los comentarios aqui están bien interesantes. A propósito, uno es uno con el todo?

      Borrar
  7. Hay metodo para variables de tipo string con este arreglo?

    ResponderBorrar
  8. alguien me podría ayudar , de que forma se puede imprimir el paso a paso del ordenamiento del arreglo.

    ResponderBorrar
  9. dos observaciones, el nombre del metodo es diferente en tu clase main?, y otro es que tu funcion no orderana bien si colocamos un elemento menor al final porque jamas obtiene el ultimo número.
    Ejemplo: [8,9,3,5,7,2]
    salida esperada: [2,3,5,7,8,9]
    salida obtenida: [3,5,7,8,9,2]

    ResponderBorrar