El bubble sort en python es un algoritmo de ordenamiento super simple y conocido, aunque puede no ser el más eficiente, pero esto dependerá mucho de para qué lo necesitemos. Su gran popularidad radica en que es de fácil implementación y en que es un buen punto de partida para aprender sobre algoritmos de ordenamiento.
El día de hoy te mostraremos cómo funciona el bubble sort en python y cuando sí deberías usarlo.
¿Qué es el bubble sort?
El bubble sort en python, también denominado en español como algoritmo de ordenamiento de burbuja, es un método que nos permite comparar repetidamente pares de elementos adyacentes en una lista, intercambiándolos si están en el orden incorrecto. El proceso se repetirá algunas veces, hasta que la lista esté completamente ordenada:
Veamos un ejemplo de su funcionamiento:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
swapped = True
if not swapped:
break
# Lista de ejemplo
x = [5, 3, 8, 6, 7, 2]
bubble_sort(x)
print(x)
Este código ordena una lista de números de menor a mayor. El algoritmo pasa por cada elemento de la lista varias veces, empujando (o “flotando”) los números más grandes hacia el final, de ahí el nombre “burbuja”.
¿Cómo funciona el bubble sort?
El bubble sort en python funciona a través de un proceso repetitivo de comparación e intercambio de elementos adyacentes. en cada una de las pasadas, el número más grande entre los que aun no están en su lugar correcto, se va desplazando hacia la derecha. Esta es precisamente la razón por la que este método adquiere el nombre de burbuja, ya que los valores más altos van flotando hacia el final de la lista.
Los pasos que sigue el algoritmo bubble sort en python son:
- Comparar elementos adyacentes: Compara el primer y segundo elemento de la lista. Si el primer elemento es mayor que el segundo, los intercambia.
- Repetir el proceso: Luego pasa al siguiente par de elementos y repite el proceso hasta que recorre toda la lista.
- Iteraciones múltiples: El proceso se repite tantas veces como sea necesario, con cada iteración reduciendo el número de elementos a revisar, ya que los valores más altos se fijan al final.
Una visualización rápida: Supongamos que tenemos la lista [5, 3, 8, 6, 7, 2]
. Aquí está lo que sucede durante cada iteración:
[5, 3, 8, 6, 7, 2]
→[3, 5, 8, 6, 7, 2]
→[3, 5, 6, 8, 7, 2]
→[3, 5, 6, 7, 8, 2]
→[3, 5, 6, 7, 2, 8]
[3, 5, 6, 7, 2, 8]
→[3, 5, 6, 7, 2, 8]
→[3, 5, 6, 2, 7, 8]
[3, 5, 6, 2, 7, 8]
→[3, 5, 2, 6, 7, 8]
→[3, 2, 5, 6, 7, 8]
[3, 2, 5, 6, 7, 8]
→[2, 3, 5, 6, 7, 8]
Después de 4 iteraciones con el bubble sort en python, la lista queda ordenada.
¿Cómo podemos optimizar el bubble sort en python?
Si bien el bubble sort en python no es el algoritmo más rápido, se puede hacer una optimización del mismo. Respecto al ejemplo anterior, añadimos una variable swapped, para poder definir el algoritmo si no se realizan intercambios en una pasada. Esto nos ayuda a redicir el número de iteraciones cuando la lista ya está casi ordenada:
def optimized_bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
swapped = True
if not swapped:
break
# Lista de ejemplo
x = [5, 3, 8, 6, 7, 2]
optimized_bubble_sort(x)
print(x)
En listas ya ordenadas o casi ordenadas, este enfoque puede reducir el tiempo de ejecución.
Casos en los que podrías considerar usar bubble sort:
- Educación: Es uno de los primeros algoritmos de ordenamiento que se enseñan debido a su simplicidad.
- Listas pequeñas: Si tienes una lista pequeña, por ejemplo, de menos de 10 elementos, la ineficiencia del algoritmo no será tan evidente.
- Datos parcialmente ordenados: En situaciones donde los datos ya están cerca de estar ordenados, el bubble sort puede ser efectivo.
Entonces, ¿por qué buscar alternativas?
Como dijimos, si bien bubble sort en python es bastante útil en situaciones muy específicas, no es la mejor opción si hablamos de eficiencia. Para listas grandes o cuando se busca optimizar el rendimiento, es recomendable optar por algoritmos mejores en essta labor, como el quick sort o el merge sort, que tienen una complejidad de O(n log n) en promedio.
Si te gustó este tema y quieres seguir aprendiendo truquitos sobre big data y otras áreas, no dudes en comunicarte con nosotros para preguntar por nuestro bootcamp en big data, una formación completa que te brindará una perspectiva distinta del big data y sus disciplinas derivadas. ¡No esperes más, transforma tu futuro hoy mismo!