Online C Compiler
Abrir en el compilador

Edición didáctica en español. El código y sus salidas conservan el original.

Ordenamiento burbuja en C

Intercambia vecinos fuera de orden y observa cómo el mayor avanza al final.

Abrir en el compilador

Ordenamiento burbuja en C
Intercambia vecinos fuera de orden y observa cómo el mayor avanza al final.

En cada pasada, compara elementos adyacentes e intercámbialos si están invertidos. Al terminar una pasada completa, el mayor de la parte pendiente queda al final, por lo que el siguiente recorrido puede ser más corto.

Una bandera permite terminar si no hubo intercambios. Con esa optimización, un array ya ordenado necesita O(N) de comparaciones; el caso general y el peor caso siguen siendo O(N²). El espacio auxiliar es O(1).

No accedas a arr[j + 1] cuando j ya sea el último índice. Prueba duplicados y orden inverso. Intercambiar solo cuando el vecino izquierdo es estrictamente mayor conserva el orden relativo de iguales.

Código C

#include <stdio.h>
#include <stdbool.h>

void bubble_sort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        bool swapped = false;
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = true;
            }
        }
        if (!swapped) break; // Array is already sorted
    }
}

void print_array(const int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main(void) {
    int data[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(data) / sizeof(data[0]);

    printf("Original array: ");
    print_array(data, n);

    bubble_sort(data, n);

    printf("Sorted array:   ");
    print_array(data, n);
    return 0;
}
Abrir en el compilador

Salida esperada

Original array: 64 34 25 12 22 11 90 
Sorted array:   11 12 22 25 34 64 90 

Preguntas frecuentes

¿Por qué el código y la salida siguen en inglés?

Las palabras clave, los identificadores y los textos que verifican las pruebas se conservan para no cambiar el programa. Las explicaciones y los controles están traducidos.