Ordenamiento de Burbuja en Python: Implementación y Ejercicio Práctico

Clase 5 de 10Curso de Introducción a los Algoritmos de Ordenamiento

Resumen

¿Cómo preparar tu implementación de algoritmo?

Cuando trabajamos en un algoritmo es crucial tener claridad y estructura. Iniciar con una pequeña sección de comentarios ayuda a mantener el enfoque y a recordar el objetivo del código. Es una buena práctica que se debe seguir para guiar el desarrollo de cualquier programa.

¿Cómo definir nuestra función en Python?

Estamos por implementar una función de ordenamiento. La buena práctica es darle un nombre significativo. En Python se suele usar la convención de nombres en camelCase. Por ejemplo, bubbleSort. Así comenzamos con minúsculas y cada nueva palabra la iniciamos con mayúscula. Una vez tenemos el nombre, el siguiente paso es definir los parámetros necesarios para la función. En este caso, necesitaremos un arreglo sobre el que trabajar.

def bubbleSort(arr):
    n = len(arr)

¿Cómo recorrer los elementos del arreglo?

Utilizaremos dos bucles for. El primero recorre todos los elementos del arreglo. El segundo bucle comparará elementos adyacentes para determinar si deben intercambiarse.

for i in range(n):
    for j in range(0, n-i-1):
        if arr[j] > arr[j+1]:
            arr[j], arr[j+1] = arr[j+1], arr[j]

El uso de len(arr) nos evita pedir al usuario especificar cuántos elementos tiene el arreglo, haciendo el código más flexible y autónomo.

¿Cómo realizar el intercambio de elementos?

Al identificar que un elemento es mayor que su adyacente, realizamos el intercambio con un simple truco que nos permite hacerlo en una sola línea en Python.

arr[j], arr[j+1] = arr[j+1], arr[j]

Este sencillo paso culmina el ordenamiento de dos elementos adyacentes si se encuentran fuera de lugar.

¿Cómo ejecutar y verificar la función?

Para probar la función, creamos un arreglo con valores aleatorios y llamamos a la función pasando este arreglo como argumento. Después, imprimimos el arreglo ordenado para verificar que el algoritmo funciona correctamente.

arr = [19, 12, 1, 2, 3, 55, 1000, 800]
bubbleSort(arr)
print("El arreglo ordenado de forma ascendente es:")
print(arr)

Desafíos para mejorar el algoritmo

El ejercicio propuesto es detectar si no se realizaron intercambios en un ciclo completo para detener la función anticipadamente. Esto mejora la eficiencia del algoritmo al dejar de comparar cuando ya todos los elementos están en orden.

Reto adicional

Implementa una lógica que rompa el bucle si no hay intercambios durante un recorrido, para un mejor rendimiento del algoritmo.

Recuerda, mejorar y optimizar los algoritmos es una parte esencial del aprendizaje. ¡Continúa practicando!