El Ordenamiento Burbuja recorre repetidamente un arreglo, intercambiando pares adyacentes desordenados hasta que todo está ordenado. Cada pasada “burbuja” el valor restante más grande hacia el final.
Piensa en una fila de asistentes a un concierto donde solo puedes intercambiar dos vecinos a la vez. Camina de izquierda a derecha, intercambiando cada par que esté desordenado. La persona más pesada burbujea hacia el final después de cada pasada — de ahí el nombre.
Cómo Funciona
- Comienza en el índice 0 y recorre hasta el final de la región no ordenada actual.
- Compara cada par de elementos adyacentes
arr[j]yarr[j+1]. - Si
arr[j] > arr[j+1], intercámbialos para que el valor mayor se desplace a la derecha. - Después de una pasada completa, el valor más grande se ha asentado al final — marca esa posición como ordenada.
- Repite, reduciendo la región no ordenada en uno cada vez, hasta que una pasada complete con cero intercambios (el arreglo ya está ordenado).
Idea Clave
La salida anticipada es la idea clave. Si una pasada completa no realiza intercambios, cada par adyacente ya está en orden — el arreglo completo está ordenado. Esta adaptividad le da al Ordenamiento Burbuja su caso mejor O(n), una propiedad rara entre los ordenamientos ingenuos.
El trade-off: muchas más comparaciones de las necesarias en arreglos grandes y aleatorios. Es por eso que el Ordenamiento por Insercción lo supera en casi todos los escenarios prácticos.
Ejemplo Trabajado
Ordena [5, 3, 8, 1, 2] con Ordenamiento Burbuja:
Pasada 1 (compara/intercambia de izquierda a derecha):
5 vs 3→ intercambiar →[3, 5, 8, 1, 2]5 vs 8→ mantener →[3, 5, 8, 1, 2]8 vs 1→ intercambiar →[3, 5, 1, 8, 2]8 vs 2→ intercambiar →[3, 5, 1, 2, 8]— 8 ya está en casa
Pasada 2 (ignora la última posición):
3 vs 5→ mantener →[3, 5, 1, 2, 8]5 vs 1→ intercambiar →[3, 1, 5, 2, 8]5 vs 2→ intercambiar →[3, 1, 2, 5, 8]— 5 ya está en casa
Pasada 3:
3 vs 1→ intercambiar →[1, 3, 2, 5, 8]3 vs 2→ intercambiar →[1, 2, 3, 5, 8]— 3 ya está en casa
Pasada 4:
1 vs 2→ mantener →[1, 2, 3, 5, 8]— sin intercambios, salida anticipada
Resultado: [1, 2, 3, 5, 8]. Observa la animación arriba — cada pasada colorea el elemento recién asentado, y las comparaciones se detienen temprano porque la pasada 4 no realiza intercambios.
Casos Extremos y Trampas
- Entrada ya ordenada — una pasada detecta cero intercambios y termina en
O(n). - “Entrada ordenada inversa — el peor caso: cada pasada realiza el número máximo de intercambios,
O(n²).” - “Duplicados — El Ordenamiento Burbuja es estable: los valores iguales nunca se cruzan, ya que solo intercambiamos en
>estricto. Esto importa cuando se ordena por múltiples claves (ej., precio, luego nombre).” - Conjuntos de datos grandes — evita el Ordenamiento Burbuja para datos de producción. Degrada cuadráticamente y realiza muchas más comparaciones de las necesarias.
Comparación con Otros Ordenamientos
| Escenario | Ordenamiento Burbuja | Ordenamiento por Insercción | Ordenamiento por Selección |
|---|---|---|---|
| Entrada casi ordenada | O(n) con salida anticipada | O(n), menos comparaciones | O(n²) siempre |
| Entrada aleatoria | O(n²), muchos intercambios | O(n²), menos intercambios | O(n²), menos intercambios |
| Estabilidad | Estable | Estable | Inestable |
| Mejor cuando | Aprendizaje / entradas muy pequeñas | Datos pequeños o casi ordenados | Los writes de memoria son costosos |
El Ordenamiento por Insercción domina en la práctica: misma complejidad, menos comparaciones e intercambios, y mejor comportamiento de caché. El verdadero valor del Ordenamiento Burbuja hoy es pedagógico.
Aplicaciones
- Enseñar la mecánica de ordenamiento por comparación y estabilidad
- Detectar un arreglo casi ordenado baratamente (la pasada de salida anticipada)
- Conjuntos de datos muy pequeños donde la simplicidad supera a la velocidad
Trayectoria de Práctica
- Traza a mano el Ordenamiento Burbuja en
[4, 2, 7, 1, 3], escribiendo el arreglo después de cada intercambio. - Agrega la optimización de bandera de intercambio y explica por qué convierte el mejor caso en
O(n). - Prueba que después de la pasada k, los k elementos más grandes están en sus posiciones finales.
- Traza una ejecución con duplicados (
[3, 1, 3, 2]) y confirma que el orden relativo de los dos 3s se preserva. - Implementa el Ordenamiento Burbuja iterativamente, luego explica por qué la versión ingenua siempre toma
n-1pasadas incluso cuando el arreglo ya está ordenado.