Algoritmos en C/C++

El ordenamiento de burbuja (bubble sort) en C y C++

En esta lección vas a implementar el ordenamiento de burbuja intercambiando una y otra vez los pares de elementos vecinos que están en el orden equivocado.

Introducción

El ordenamiento de burbuja recorre el arreglo varias veces, compara cada par de elementos vecinos y los intercambia si están en el orden equivocado. En cada pasada, el mayor valor que aún no está ordenado se va moviendo hacia el final del arreglo.

Puntos importantes

  • Prueba con una entrada vacía, un solo elemento, valores repetidos y datos ya ordenados.
  • Primero haz que el código sea correcto y después optimízalo.
  • En código real, usa preferentemente las funciones ya hechas de la biblioteca estándar.

Visualizador de El ordenamiento de burbuja (bubble sort) en C y C++

O(n)

Usa Reproducir o Paso para seguir cada comparación y movimiento de datos.

Ejemplos de código C y C++

C
Ejecutar →
main.c
#include <stdio.h>

int main(void) {
    int values[] = {5, 1, 4, 2};
    for (int end = 3; end > 0; --end) {
        int changed = 0;
        for (int index = 0; index < end; ++index) {
            if (values[index] > values[index + 1]) {
                int temporary = values[index];
                values[index] = values[index + 1];
                values[index + 1] = temporary;
                changed = 1;
            }
        }
        if (!changed) break;
    }
    for (int index = 0; index < 4; ++index) {
        printf("%d ", values[index]);
    }
}
Resultado de la ejecución
1 2 4 5
C++
Ejecutar →
main.cpp
#include <iostream>
#include <vector>

int main() {
    std::vector values{5, 1, 4, 2};
    for (auto end = values.end(); end != values.begin(); --end) {
        bool changed = false;
        for (auto item = values.begin(); item + 1 != end; ++item) {
            if (*item > *(item + 1)) {
                std::iter_swap(item, item + 1);
                changed = true;
            }
        }
        if (!changed) break;
    }
    for (int value : values) {
        std::cout << value << ' ';
    }
}
Resultado de la ejecución
1 2 4 5

Comparación entre C y C++

La variable changed indica si hubo al menos un intercambio durante la pasada. Si no hubo ninguno, el arreglo ya está ordenado y el bucle se detiene antes, así que un arreglo ya ordenado solo cuesta O(n). En el peor caso el algoritmo necesita O(n²), por eso sirve sobre todo para aprender. En la práctica, el código en C++ suele usar std::sort.

C

Los bucles, los punteros, las longitudes y los búferes temporales se escriben de forma explícita.

C++

Los iteradores y los algoritmos estándar separan el procesamiento de la forma en que se guardan los datos.

Ejercicios de práctica

Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.

  • Sigue cada comparación en papel.
  • Prueba con valores repetidos y con valores muy grandes y muy pequeños.
  • Mide el tiempo de ejecución de tu código y compáralo con la biblioteca estándar.

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos