Método de inserción binaria en C
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.
Enunciado
Implementa inserción binaria para ordenar un array de enteros en orden ascendente.
Solución en C
#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;
}Resultado esperado
0 12 17 23 31 37 46 54 54 72 88 100Errores frecuentes
- Buscar posición en un rango incorrecto (
0..ien lugar de0..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.
Aplicación práctica
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.
Siguiente ejercicio recomendado
- Ordenación por inserción directa en C: ejercicio resuelto
- Shell sort en C: ejercicio resuelto paso a paso
- Merge sort en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y siguiente paso
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Inserción binaria en C es más rápida que inserción directa?
Reduce comparaciones gracias a la búsqueda binaria, pero sigue desplazando elementos, así que no elimina el coste cuadrático en peor caso.
¿Cuál es su complejidad temporal?
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.
¿Cuándo merece la pena usarla en práctica?
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.