Menu
Coddy logo textTech

Ordenamiento por Inserción

Última actualización

El ordenamiento por inserción construye el arreglo ordenado un elemento a la vez. Toma el siguiente elemento no ordenado (la "clave") y desplaza cada elemento mayor de la región ordenada un espacio a la derecha, luego coloca la clave en el hueco. Es exactamente como la mayoría de la gente ordena una mano de cartas. Pulsa reproducir arriba para ver cómo se inserta cada clave, o avanza los desplazamientos uno a uno.

El ordenamiento por inserción es muy rápido con entradas pequeñas o casi ordenadas - se ejecuta en O(n) cuando los datos ya están ordenados - por lo que muchos ordenamientos híbridos recurren a él para subarreglos pequeños.

Complejidad temporal y espacial

CasoComplejidadNotas
Mejor casoO(n)Ya ordenado
Caso promedioO(n²)Orden aleatorio
Peor casoO(n²)Orden inverso
EspacioO(1)In situ
EstableLos elementos iguales conservan su orden relativo

Paso a paso

PasoQué ocurre
1Considera el primer elemento como una región ordenada de tamaño uno.
2Toma el siguiente elemento como la clave.
3Desplaza cada elemento ordenado mayor que la clave un espacio a la derecha.
4Inserta la clave en el hueco abierto.
5Repite hasta que se hayan insertado todos los elementos.

Ejemplo resuelto

Ordenando [5, 2, 4, 1]:

PasadaArregloAcción
Inicio[5, 2, 4, 1]5 es la región ordenada inicial de tamaño uno.
1[2, 5, 4, 1]Clave 2: desplaza 5 a la derecha, inserta 2 al principio.
2[2, 4, 5, 1]Clave 4: desplaza 5 a la derecha, 2 es menor así que detén, inserta 4.
3[1, 2, 4, 5]Clave 1: desplaza 5, 4, 2 a la derecha, inserta 1 al principio.
Fin[1, 2, 4, 5]Todos los elementos insertados; el arreglo está ordenado.

Cuándo usar el ordenamiento por inserción

Úsalo cuandoEvítalo cuando
El arreglo es pequeño (aproximadamente n < 20).El arreglo es grande y está ordenado al azar.
Los datos ya están casi ordenados, dando el mejor caso O(n).Necesitas un peor caso garantizado de O(n log n).
Necesitas un ordenamiento estable, in situ y con espacio extra O(1).Mover elementos es costoso, ya que realiza muchos desplazamientos.
Los datos llegan de forma incremental y deben mantenerse ordenados en línea.La entrada está en orden inverso, su peor caso O(n²).

Código de Insertion Sort

Una implementación limpia y ejecutable de Insertion Sort en Python, JavaScript, Java, C++, C. Elige un lenguaje, copia el código o ábrelo ya cargado en el Playground de Coddy.

Código de Insertion Sort en Python

Python
1def insertion_sort(a):2    for i in range(1, len(a)):3        key = a[i]4        j = i - 15        # Shift larger elements one slot to the right6        while j >= 0 and a[j] > key:7            a[j + 1] = a[j]8            j -= 19        a[j + 1] = key10    return a11
12
13nums = [7, 3, 9, 1, 5, 8, 2]14print("Before:", nums)15insertion_sort(nums)16print("After: ", nums)
Ejecuta este código en el Playground de Python

Preguntas frecuentes sobre el ordenamiento por inserción

¿Cuál es la complejidad temporal del ordenamiento por inserción?
El ordenamiento por inserción es O(n²) en promedio y en el peor caso, pero O(n) en un arreglo ya ordenado o casi ordenado. Usa espacio extra O(1).
¿Es estable el ordenamiento por inserción?
Sí. El ordenamiento por inserción solo desplaza los elementos estrictamente mayores que la clave, por lo que los elementos iguales nunca se cruzan y se conserva su orden relativo.
¿Cuándo debería usar el ordenamiento por inserción?
Úsalo para arreglos pequeños o datos que ya están casi ordenados. Por su bajo costo y su mejor caso adaptativo, algoritmos híbridos como Timsort lo usan para tramos pequeños.
¿Cuál es la diferencia entre el ordenamiento por inserción y el ordenamiento de burbuja?
Ambos son ordenamientos por comparación O(n²), pero el ordenamiento por inserción desplaza elementos para abrir un hueco para la clave, mientras que el de burbuja intercambia repetidamente pares adyacentes desordenados. El de inserción suele hacer menos escrituras y rinde mejor en la práctica, sobre todo con datos casi ordenados donde alcanza su mejor caso O(n).
¿Por qué el ordenamiento por inserción es más rápido que merge sort en arreglos pequeños?
El ordenamiento por inserción tiene un costo constante muy bajo y no usa recursión ni memoria extra, así que en entradas pequeñas supera a los ordenamientos O(n log n) pese a su peor complejidad asintótica. Por eso los ordenamientos híbridos como Timsort e introsort cambian al ordenamiento por inserción para subarreglos pequeños.
¿El ordenamiento por inserción funciona mejor con una lista enlazada o un arreglo?
El ordenamiento por inserción normalmente se escribe para arreglos, donde desplazar elementos es el costo principal. En una lista enlazada evitas el desplazamiento insertando el nodo en su lugar, pero pierdes el acceso aleatorio rápido, así que encontrar el punto de inserción sigue costando tiempo lineal por elemento y el costo total sigue siendo O(n²).
Coddy programming languages illustration

Domina los algoritmos con Coddy

COMENZAR