Ordenamiento por inserción (insertion sort)

  • Ciencias de la Computación
  • algoritmo de ordenamiento
  • complejidad insertion sort
  • ejemplo ordenamiento por…
  • estabilidad insertion sort
  • ventajas y desventajas…
  • cómo funciona insertion sort

Podcast

Ordenamiento por Inserción: Más Rápido de lo que Crees0:00 / 9:19
0:001:00 restante

El ordenamiento por inserción, conocido en inglés como insertion sort, es uno de los algoritmos de ordenamiento más intuitivos y eficientes para trabajar con un número reducido de elementos o listas que ya están casi ordenadas. Su funcionamiento se asemeja mucho a la forma en que una persona ordena un mazo de cartas de juego en su mano.

Imagina que tienes cartas desordenadas y quieres organizarlas. Tomas una carta a la vez de la pila desordenada y la colocas en su posición correcta entre las cartas que ya tienes ordenadas. Este proceso se repite hasta que todas las cartas encuentran su lugar.

¿Qué es el Ordenamiento por Inserción (Insertion Sort)?

El algoritmo de ordenamiento por inserción es un método simple que construye la lista final ordenada un elemento a la vez. Es un algoritmo de comparación que divide la lista de entrada en dos partes: una sublista ordenada y una sublista desordenada. Iterativamente, toma elementos de la sublista desordenada y los inserta en la posición adecuada dentro de la sublista ordenada.

Principio de Funcionamiento del Insertion Sort

El corazón del ordenamiento por inserción reside en su enfoque gradual. Inicialmente, el primer elemento de la lista se considera ya ordenado, formando nuestra primera sublista ordenada. El resto de los elementos constituyen la sublista desordenada.

El algoritmo procede del siguiente modo:

  1. El primer elemento de la lista se asume como ordenado.
  2. Para cada elemento restante (desde el segundo hasta el último): a. Se toma el elemento actual, que llamaremos "clave". b. Se compara la clave con los elementos de la sublista ordenada, moviéndose de derecha a izquierda. c. Si un elemento en la sublista ordenada es mayor que la clave, se desplaza una posición a la derecha para crear un espacio. d. Este desplazamiento continúa hasta encontrar un elemento que sea menor o igual que la clave, o hasta llegar al inicio de la sublista ordenada. e. Finalmente, la clave se inserta en la posición vacía resultante.
  3. Este proceso se repite hasta que todos los elementos de la lista desordenada han sido insertados en la sublista ordenada.

Comprueba lo que ya sabes

Test · 20 preguntas · las 3 primeras gratis

Pregunta 1 de 30%

El funcionamiento intuitivo del ordenamiento por inserción implica que se toman varias cartas desordenadas simultáneamente para encontrar su posición correcta.

Practícalo con tarjetas

25 tarjetas · las 3 primeras gratis, sin cuenta

1 / 25

¿Qué es el ordenamiento por inserción y para qué se utiliza?

El ordenamiento por inserción es un algoritmo de ordenamiento simple y eficiente para un número pequeño de elementos.

Toca para girar · Desliza para navegar

Ejemplo Práctico de Ordenamiento por Inserción Paso a Paso

Para entender mejor cómo funciona el ordenamiento por inserción, vamos a ordenar la siguiente lista de números enteros de forma ascendente: [5, 2, 4, 6, 1, 3].

Paso 0: Inicialización

  • Lista original: [5, 2, 4, 6, 1, 3]
  • Sublista ordenada inicial: [5]
  • Sublista desordenada inicial: [2, 4, 6, 1, 3]

Paso 1: Insertar el segundo elemento (2)

  • Clave: 2
  • Se compara 2 con 5. Como 2 < 5, se desplaza 5 a la derecha.
  • Lista: [_, 5, 4, 6, 1, 3]
  • Se inserta 2 en la posición vacía.
  • Lista resultante: [2, 5, 4, 6, 1, 3]

Paso 2: Insertar el tercer elemento (4)

  • Clave: 4
  • Se compara 4 con 5. Como 4 < 5, se desplaza 5 a la derecha.
  • Lista: [2, _, 5, 6, 1, 3]
  • Se compara 4 con 2. Como 4 > 2, 2 permanece en su lugar.
  • Se inserta 4 en la posición vacía.
  • Lista resultante: [2, 4, 5, 6, 1, 3]

Paso 3: Insertar el cuarto elemento (6)

  • Clave: 6
  • 6 es mayor que 5, 4 y 2. No se desplaza ningún elemento. La clave 6 ya está en la posición correcta.
  • Lista resultante: [2, 4, 5, 6, 1, 3]

Paso 4: Insertar el quinto elemento (1)

  • Clave: 1
  • Se compara 1 con 6, 5, 4 y 2. Todos son mayores, así que se desplazan.
  • Lista: [_, 2, 4, 5, 6, 3]
  • Se inserta 1 en la primera posición.
  • Lista resultante: [1, 2, 4, 5, 6, 3]

Paso 5: Insertar el sexto elemento (3)

  • Clave: 3
  • Se compara 3 con 6, 5, 4. Se desplazan.
  • Lista: [1, 2, _, 4, 5, 6]
  • Se compara 3 con 2. Como 3 > 2, 2 permanece en su lugar.
  • Se inserta 3 en la posición vacía.
  • Lista resultante: [1, 2, 3, 4, 5, 6]

¡La lista está ahora completamente ordenada!

Análisis de la Complejidad Temporal del Ordenamiento por Inserción

La eficiencia de un algoritmo se mide por su complejidad temporal, la cual describe cómo el tiempo de ejecución crece con el tamaño de la entrada, n.

Complejidad del Ordenamiento por Inserción (O(n), O(n²))

  • Mejor Caso: O(n) Esto ocurre cuando la lista de entrada ya está completamente ordenada. El algoritmo solo necesita recorrer la lista una vez, realizando comparaciones mínimas sin desplazamientos significativos. La notación O(n) indica una complejidad lineal, lo cual es muy eficiente.

  • Peor Caso: O(n²) El peor caso se da cuando la lista está ordenada en orden inverso. Cada elemento debe compararse y desplazarse con casi todos los elementos de la sublista ordenada. Esto resulta en un número de operaciones proporcional a n², una complejidad cuadrática, que crece rápidamente con n.

  • Caso Promedio: O(n²) En la mayoría de los casos aleatorios, el rendimiento del ordenamiento por inserción se sitúa en la complejidad cuadrática O(n²). Esto se debe a que, en promedio, se necesita realizar una cantidad considerable de comparaciones y desplazamientos.

Es crucial entender que, a pesar de su complejidad O(n²) en el peor y promedio caso, el ordenamiento por inserción es sorprendentemente eficiente para listas pequeñas (normalmente con menos de 10-20 elementos) o para datos que ya están casi ordenados. En estas situaciones, su simplicidad y bajo coste constante lo hacen competitivo, e incluso superior, a algoritmos más complejos.

Estabilidad del Algoritmo de Insertion Sort

Una característica importante del ordenamiento por inserción es su estabilidad. Un algoritmo es estable si mantiene el orden relativo de los elementos que tienen valores iguales. Esto significa que si en la lista original hay dos elementos idénticos, el insertion sort garantiza que su orden en la lista final ordenada será el mismo que el original. Esta propiedad es valiosa en aplicaciones donde, además del valor principal, los elementos tienen otros atributos que deben preservar su orden original.

Ventajas y Desventajas del Ordenamiento por Inserción

Comprender los pros y contras del insertion sort nos ayuda a saber cuándo es la mejor opción.

Ventajas Clave del Insertion Sort

  • Simplicidad y facilidad de implementación: Es un algoritmo fácil de entender y codificar.
  • Eficiencia para conjuntos de datos pequeños o casi ordenados: Su rendimiento es excelente en estos escenarios.
  • Estabilidad: Preserva el orden relativo de elementos con valores idénticos.
  • Bajo consumo de memoria (in-place): Solo requiere una cantidad constante de espacio de memoria adicional (O(1)), lo que lo hace muy eficiente en términos de recursos.

Desventajas del Insertion Sort

  • Ineficiencia para conjuntos de datos grandes y desordenados: Su complejidad cuadrática O(n²) lo hace poco práctico para listas extensas, ya que el tiempo de ejecución aumenta drásticamente.

Errores Comunes al Usar el Ordenamiento por Inserción

Un error frecuente al trabajar con el ordenamiento por inserción es confundir el concepto de "desplazamiento" con el de "intercambio". En este algoritmo, los elementos mayores que la clave se desplazan para abrir un hueco, no se intercambian directamente con la clave. La clave se inserta solo una vez en la posición final adecuada.

Otro malentendido es subestimar su utilidad. Aunque no es el algoritmo más rápido en general, su eficiencia para listas casi ordenadas o muy pequeñas lo hace valioso en contextos específicos. De hecho, a menudo se usa como parte de algoritmos híbridos de ordenamiento, como Timsort o Introsort, para optimizar el rendimiento en diferentes tamaños de sublistas.

Observaciones y Experimentación en la Simulación del Insertion Sort

Al simular el ordenamiento por inserción, podrás visualizar y entender su mecánica a fondo. Cuando "insertas una clave" en la simulación, observarás cómo el elemento seleccionado se compara con los ya ordenados y cómo estos últimos se mueven para dejarle espacio. Esto permite apreciar:

  • El movimiento de los elementos: Observa cómo los elementos se desplazan a la derecha para la inserción.
  • El número de comparaciones: Nota cómo este número varía según el orden inicial de la lista.
  • El impacto del orden inicial: Experimenta con listas ordenadas, inversamente ordenadas o aleatorias para ver cómo el tiempo de ejecución cambia entre el mejor (O(n)) y el peor (O(n²)) caso.
  • La estabilidad: Si la simulación permite duplicados, comprueba cómo se mantiene su orden relativo.

Presta atención a cómo cada elemento se "abre camino" en la parte ordenada de la lista. Este proceso paso a paso es clave para comprender por qué el ordenamiento por inserción es eficiente para listas pequeñas y casi ordenadas, pero se vuelve lento para listas grandes y aleatorias debido a la cantidad de desplazamientos y comparaciones necesarias.

Preguntas Frecuentes sobre el Ordenamiento por Inserción

¿Qué es el ordenamiento por inserción y cómo funciona?

El ordenamiento por inserción es un algoritmo simple que construye una lista ordenada elemento a elemento. Funciona tomando un elemento de la parte desordenada de la lista y lo inserta en su posición correcta dentro de la parte ya ordenada, desplazando los elementos mayores para hacer espacio.

¿Cuándo es eficiente utilizar el ordenamiento por inserción?

Es particularmente eficiente para listas pequeñas (menos de 20 elementos, aproximadamente) y para listas que ya están casi ordenadas. En estos casos, su simplicidad y bajo costo de constantes pueden superar a algoritmos más complejos.

¿Cuál es la complejidad temporal del ordenamiento por inserción en el peor caso?

La complejidad temporal del ordenamiento por inserción en el peor caso es O(n²), donde n es el número de elementos. Esto ocurre cuando la lista está ordenada en orden inverso, requiriendo el máximo número de comparaciones y desplazamientos por cada elemento.

¿El algoritmo de ordenamiento por inserción es estable?

Sí, el ordenamiento por inserción es un algoritmo estable. Esto significa que si hay dos o más elementos con el mismo valor en la lista, su orden relativo original se mantiene después de que la lista ha sido ordenada.

¿Qué diferencia hay entre desplazamiento e intercambio en insertion sort?

En el ordenamiento por inserción, los elementos mayores que la "clave" se desplazan una posición a la derecha para crear un hueco. La clave se inserta en ese hueco una sola vez. Un intercambio implicaría cambiar directamente la posición de dos elementos, lo cual no es el mecanismo principal de inserción en este algoritmo.

Practícalo, no solo lo leas

25 tarjetas, un test con explicaciones y un pódcast sobre este tema. La cuenta es gratis y sigues justo donde lo dejaste.

  • Sin tarjeta de crédito
  • Web y app móvil
  • 330.000+ estudiantes
Empezar gratis

Temas relacionados