Ordenación por inserción directa en C: ejercicio resuelto

  2 minutos

Si buscas inserción directa en C ejercicio resuelto, este post te muestra la implementación completa y el razonamiento detrás del algoritmo.

La idea es la misma que cuando ordenas cartas en la mano: tomas el siguiente elemento y lo insertas en la posición correcta dentro de la parte que ya está ordenada.

Implementa el algoritmo de inserción directa para ordenar un array de enteros en orden ascendente.

#include <stdio.h>

void insercion_directa(int a[], int n) {
    for (int i = 1; i < n; i++) {
        int clave = a[i];
        int j = i - 1;

        while (j >= 0 && a[j] > clave) {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = clave;
    }
}

int main(void) {
    int a[] = {12, 11, 13, 5, 6};
    int n = (int)(sizeof(a) / sizeof(a[0]));

    insercion_directa(a, n);

    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}
5 6 11 12 13
  • Olvidar guardar el elemento actual en clave antes de desplazar.
  • Escribir mal la posición final (a[j + 1] = clave).
  • Confundir j >= 0 con j > 0 y perder comparaciones.
  • No entender que el coste viene de los desplazamientos.

Inserción directa es útil cuando:

  • el array es pequeño,
  • la entrada está casi ordenada,
  • quieres una base sólida antes de pasar a shell sort o merge sort.

También aparece mucho en ejercicios iniciales de estructuras y en entrevistas de nivel junior.

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

Sí. Es uno de los mejores algoritmos para entender bucles, comparaciones y desplazamientos de elementos.

Peor y promedio: O(n²). Mejor caso (array casi ordenado): O(n).

Haz trazas manuales con arrays de 5 a 8 elementos y cuenta cuántos desplazamientos haces en cada iteración.