Inserción binaria en C: ejercicio resuelto de ordenación

  3 minutos

Si buscas inserción binaria en C ejercicio resuelto, aquí tienes una implementación completa con la idea clave: separar la búsqueda de posición y el desplazamiento de elementos.

Inserción binaria es una variante de inserción directa. Reduce comparaciones usando búsqueda binaria para encontrar dónde insertar, pero sigue necesitando mover elementos en el array.

Implementa inserción binaria para ordenar un array de enteros en orden ascendente.

#include <stdio.h>

int posicion_insercion(const int a[], int left, int right, int key) {
    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (a[mid] <= key) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return left;
}

void insercion_binaria(int a[], int n) {
    for (int i = 1; i < n; i++) {
        int key = a[i];
        int pos = posicion_insercion(a, 0, i - 1, key);

        for (int j = i - 1; j >= pos; j--) {
            a[j + 1] = a[j];
        }
        a[pos] = key;
    }
}

int main(void) {
    int a[] = {37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54, 54};
    int n = (int)(sizeof(a) / sizeof(a[0]));

    insercion_binaria(a, n);

    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}
0 12 17 23 31 37 46 54 54 72 88 100
  • Buscar posición en un rango incorrecto (0..i en lugar de 0..i-1).
  • Olvidar desplazar elementos antes de insertar key.
  • Usar una condición errónea con repetidos y perder estabilidad.
  • Pensar que pasa a O(n log n): el desplazamiento sigue siendo lineal.

Este ejercicio sirve para:

  • entender bien la diferencia entre coste de comparación y coste de movimiento,
  • practicar implementación de búsqueda binaria sobre un prefijo ordenado,
  • preparar entrevistas donde te piden optimizar inserción directa sin cambiar estructura.

Si quieres una ruta completa con progresión real de dificultad:

Reduce comparaciones gracias a la búsqueda binaria, pero sigue desplazando elementos, así que no elimina el coste cuadrático en peor caso.

En promedio y peor caso se mantiene en O(n²) por los desplazamientos. La búsqueda de posición cuesta O(log n), pero no domina el total.

Cuando quieres mejorar inserción directa en arrays pequeños o medianos y practicar técnicas de búsqueda y ordenación en un mismo ejercicio.