Ordenamiento Burbuja (Bubble Sort) en PSeInt: La Guía Definitiva 2026

Nivel: Avanzado Tiempo: ~30 min

¿Cómo organiza una computadora una lista de contactos, precios o puntuaciones de menor a mayor? La respuesta está en los Algoritmos de Ordenamiento. Hoy aprenderás el más clásico y pedagógico de todos: el Método de la Burbuja (Bubble Sort). Aunque no es el más rápido para millones de datos, es el mejor para entender cómo funcionan los Arreglos (Vectores) y los Ciclos Anidados. En este tutorial de PSeInt, desglosaremos la lógica de comparar elementos adyacentes y «burbujear» los valores más grandes hacia el final de la lista.

Conceptos Clave: Vectores y Bucles Anidados

El ordenamiento burbuja no es magia; es una coreografía precisa de datos. Necesitas dominar estos tres pilares:

Arreglos (Dimensiones)

No podemos ordenar variables sueltas (a, b, c…) eficientemente. Necesitamos una estructura de datos que contenga una lista: un Arreglo o Vector. En PSeInt usamos Dimension lista[N] para acceder a los datos mediante índices (ej: lista[1], lista[2]).

Ciclos Anidados (Para dentro de Para)

Una sola pasada por la lista no es suficiente para ordenarla. Necesitamos repetir el proceso de revisión varias veces. Esto requiere un bucle externo (que cuenta las pasadas) y un bucle interno (que compara los elementos).

Análisis del Algoritmo: ¿Por qué «Burbuja»?

El nombre viene de la física: en un líquido, las burbujas de aire (elementos más «ligeros» o pequeños) tienden a subir, mientras que los elementos pesados se hunden.

  • ESTRATEGIA Recorrer el arreglo comparando pares adyacentes: elemento[j] contra elemento[j+1].
  • CONDICIÓN Si el número actual es mayor que el siguiente (están en desorden), se realiza un Intercambio (Swap).
    Lógica: Si A > B, entonces invertimos posiciones.
  • REPETICIÓN Este proceso empuja el número más grande hacia el final de la lista en la primera vuelta. Se repite el ciclo N veces hasta que todo esté ordenado.

Código Fuente (Algoritmo Estándar)

Archivo: Burbuja.psc
Algoritmo OrdenamientoBurbuja
    // 1. Definición de Variables y Arreglo
    Definir num, i, j, aux, cantidad Como Entero;
    // Creamos un arreglo con capacidad suficiente (ej: 50 elementos)
    Dimension num[50];
    
    // 2. Entrada de Datos (Llenado del Vector)
    Escribir "¿Cuántos números desea ordenar? (Máx 50):";
    Leer cantidad;
    
    Escribir "--- Ingrese los números ---";
    Para i <- 1 Hasta cantidad Con Paso 1 Hacer
        Escribir "Número ", i, ":";
        Leer num[i];
    FinPara
    
    // 3. PROCESO DE ORDENAMIENTO (Burbuja)
    // El ciclo externo 'i' controla las pasadas
    Para i <- 1 Hasta cantidad - 1 Con Paso 1 Hacer
        
        // El ciclo interno 'j' compara elementos adyacentes
        Para j <- 1 Hasta cantidad - 1 Con Paso 1 Hacer
            
            // Comparación: ¿El actual es mayor que el siguiente?
            Si num[j] > num[j+1] Entonces
                // INTERCAMBIO (Swap) usando variable auxiliar
                aux <- num[j];
                num[j] <- num[j+1];
                num[j+1] <- aux;
            FinSi
            
        FinPara
        
    FinPara
    
    // 4. Salida de Datos (Vector Ordenado)
    Escribir "--------------------------------";
    Escribir "LISTA ORDENADA ASCENDENTE:";
    Para i <- 1 Hasta cantidad Hacer
        Escribir num[i], " " Sin Saltar;
    FinPara
    Escribir ""; // Salto de línea final
    
FinAlgoritmo

Diagrama de Flujo

⚠️ Errores Críticos al Ordenar

El algoritmo de burbuja es propenso a un error fatal que detiene la ejecución:

Error: Subíndice Fuera de Rango

Si tu arreglo tiene 5 elementos y haces un ciclo j Hasta 5, cuando intentes acceder a num[j+1] estarás buscando la posición 6, que no existe. PSeInt se cerrará con error.
Solución: El ciclo interno siempre debe ir hasta Cantidad - 1.

Pérdida de Datos (Swap Incorrecto)

Intentar intercambiar sin aux:
A <- B (A pierde su valor original)
B <- A (B toma el valor de B)
Resultado: Ambos números terminan valiendo lo mismo. Siempre usa una variable temporal.

Reto: Burbuja Mejorada (Más Eficiente)

El método clásico es lento porque sigue comparando números que ya están ordenados al final. Esta versión optimizada reduce el rango del ciclo interno en cada pasada (N-i), ahorrando miles de operaciones en listas grandes.

Algoritmo BurbujaOptimizada
    Definir vector, n, i, j, aux Como Entero;
    Dimension vector[100];
    
    // ... (Suponer carga de datos aquí) ...
    n <- 5; // Ejemplo con 5 datos
    vector[1]<-10; vector[2]<-5; vector[3]<-3; vector[4]<-8; vector[5]<-1;
    
    // OPTIMIZACIÓN:
    // En cada vuelta 'i', el número más grande ya quedó al final.
    // No necesitamos revisarlo de nuevo.
    // El ciclo interno va hasta (n - i).
    
    Para i <- 1 Hasta n-1 Hacer
        Para j <- 1 Hasta n-i Hacer
            
            Si vector[j] > vector[j+1] Entonces
                aux <- vector[j];
                vector[j] <- vector[j+1];
                vector[j+1] <- aux;
            FinSi
            
        FinPara
    FinPara
    
    Escribir "Ordenado eficientemente.";
FinAlgoritmo

Preguntas Frecuentes (FAQ)

¿Cómo lo ordeno de Mayor a Menor (Descendente)?
Es muy sencillo: solo invierte el operador de comparación en el condicional. Cambia Si A > B por Si A < B. El resto del código permanece idéntico.
¿Qué complejidad tiene la Burbuja?
Tiene una complejidad de O(n²). Significa que si duplicas la cantidad de datos, el tiempo de proceso se cuadruplica. Es ineficiente para grandes volúmenes de datos, pero excelente para aprender lógica.
¿Puedo ordenar textos (nombres)?
¡Sí! PSeInt puede comparar cadenas de caracteres alfabéticamente. "Ana" < "Beto" es verdadero. Define el arreglo como Caracter y el algoritmo funcionará igual.
¿Qué pasa si la lista ya está ordenada?
El algoritmo estándar seguirá haciendo todas las comparaciones (ineficiente). Una versión más avanzada usa una variable "Bandera" (booleana) para detenerse si en una pasada no se hicieron intercambios.

¿Listo para el siguiente nivel?

Domina la lógica de programación con nuestra colección completa.

Ver Más Ejercicios Resueltos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *