Algoritmo de Ordenamiento de Burbuja (Bubble Sort)

Author
Por Darío Rivera
Publicado el en Lógica y algoritmia

El algoritmo de ordenamiento de burbuja (Bubble Sort) es un algoritmo sencillo de ordenamiento que busca mediante repetidas comparaciones de los elementos adyacentes ordenar un conjunto de elementos. Actualmente existen diferentes algoritmos de ordenamiento mucho más óptimos que este, por lo cual se utiliza más que todo como herramienta de educación en lógica y algoritmia.

Algoritmo paso a paso

Supongamos que tenemos un conjunto de elementos sin ordenar como el siguiente:

bubble sort step

Los subíndices P1 a P5 indican la posición de cada elemento en el arreglo. Como son cinco posiciones se realizarán cuatro verificaciones entre los elementos adyacentes así:

Si P1 > P2  se intercambian
Si P2 > P3  se intercambian
Si P3 > P4  se intercambian
Si P4 > P5  se intercambian

Con esto podemos asegurar que el último elemento de la colección está ordenado. Lo que sigue, son subsecuentes iteraciones del mismo procedimiento excluyendo el último elemento cada vez. Empecemos.

En esta iteración se verifica P1 > P2, como 30 > 20 se intercambian y queda [20,30,10,5,0].

bubble sort step

En esta iteración se verifica P2 > P3, como 30 > 10 se intercambian y queda [20,10,30,5,0].

bubble sort step

En esta iteración se verifica P3 > P4, como 30 > 5 se intercambian y queda [20,10,5,30,0].

bubble sort step

En esta iteración se verifica P4 > P5, como 30 > 0 se intercambian y queda [20,10,5,0,30].

bubble sort step

Como puedes darte cuenta en este punto una vez terminada nuestra primera ronda de iteraciones podemos asegurar que el elemento del final está ordenado. Dado que el número 30 estaba en la primera posición, en cierta forma, este algoritmo "hala" los elementos de izquierda a derecha.

La siguiente iteración que vamos a aplicar sería la siguiente:

Si P1 > P2  se intercambian
Si P2 > P3  se intercambian
Si P3 > P4  se intercambian

En esta iteración se verifica P1 > P2, como 20 > 10 se intercambian y queda [10,20,5,0,30].

bubble sort step

En esta iteración se verifica P2 > P3, como 20 > 5 se intercambian y queda [10,5,20,0,30].

bubble sort step

En esta iteración se verifica P3 > P4, como 20 > 0 se intercambian y queda [10,5,0,20,30].

bubble sort step

En este punto ya es clara la siguiente serie de comprobaciones.

Si P1 > P2  se intercambian
Si P2 > P3  se intercambian

En esta iteración se verifica P1 > P2, como 10 > 5 se intercambian y queda [5,10,0,20,30].

bubble sort step

En esta iteración se verifica P2 > P3, como 10 > 0 se intercambian y queda [5,0,10,20,30].

bubble sort step

La última iteración que realizaremos será la siguiente:

Si P1 > P2  se intercambian

En esta iteración se verifica P1 > P2, como 5 > 0 se intercambian y queda [0,5,10,20,30].

bubble sort step

Como ves finalmente el arreglo de elementos queda ordenado.

Pseudocódigo

El pseudocódigo para este algoritmo es el siguiente:

procedure bubbleSort(A : collection)
    n := length(A)
    for i := 1 to n-1 inclusive do
        for j := 1 to n-i inclusive do
            if A[j-1] > A[j] then
                swap(A[j-1], A[j])
            end if
        end for
    end for
end procedure

Optimización

Si te das cuenta este algoritmo no está optimizado. Supongamos que recibimos una colección de elementos que ya está ordenada, aún así este algoritmo realizaría todas las iteraciones solo para devolver la misma colección sin alterarla.

Para solventar esto es necesario al menos hacer una iteración sobre los elementos, y en caso de no realizarse ningún intercambio de posiciones supondremos que la colección ya está ordenada. Con esto el pseudocódigo quedaría así:

procedure bubbleSort(A : collection)
    n := length(A)
    for i := 1 to n-1 inclusive do
        swapped := false
        for j := 1 to n-i inclusive do
            if A[j-1] > A[j] then
                swapped := true
                swap(A[j-1], A[j])
            end if
        end for
        if not swapped
            break
        end if
    end for
end procedure

Puedes ver una implementación de este algoritmo en PHP el siguiente post.

Implementación del algoritmo Bubble Sort (ordenamiento de burbuja) en PHP


Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.