logo

Ordenación por inserción: tutoriales sobre algoritmos y estructura de datos

Tipo de inserción es un algoritmo de clasificación simple que funciona insertando iterativamente cada elemento de una lista sin ordenar en su posición correcta en una parte ordenada de la lista. Es un clasificación estable algoritmo, lo que significa que los elementos con valores iguales mantienen su orden relativo en la salida ordenada.

Tipo de inserción Es como clasificar naipes en tus manos. Divides las cartas en dos grupos: las cartas ordenadas y las cartas sin clasificar. Luego, eliges una tarjeta del grupo sin clasificar y la colocas en el lugar correcto del grupo ordenado.

Algoritmo de clasificación por inserción:

Tipo de inserción es un algoritmo de clasificación simple que funciona construyendo una matriz ordenada, un elemento a la vez. Se considera un en su lugar Algoritmo de clasificación, lo que significa que no requiere ningún espacio de memoria adicional más allá de la matriz original.



Algoritmo:

Para lograr la ordenación por inserción, siga estos pasos:

  • Tenemos que comenzar con el segundo elemento de la matriz, ya que se supone que el primer elemento de la matriz está ordenado.
  • Compare el segundo elemento con el primer elemento y verifique si el segundo elemento es más pequeño y luego cámbielos.
  • Vaya al tercer elemento y compárelo con el segundo elemento, luego al primer elemento y cambie según sea necesario para colocarlo en la posición correcta entre los primeros tres elementos.
  • Continúe este proceso, comparando cada elemento con los anteriores e intercambiándolos según sea necesario para colocarlo en la posición correcta entre los elementos ordenados.
  • Repita hasta que se ordene toda la matriz.

Funcionamiento del algoritmo de clasificación por inserción:

Considere una matriz que tiene elementos : {23, 1, 10, 5, 2}

Primer pase:

  • elemento actual es 23
  • Se supone que el primer elemento de la matriz está ordenado.
  • La parte ordenada hasta índice es: [23]

Segundo pase:

  • Comparar 1 con 23 (elemento actual con la parte ordenada).
  • Desde 1 es más pequeño, inserte 1 antes 23 .
  • La parte ordenada hasta 1er índice es: [1, 23]

Tercer pase:

  • Comparar 10 con 1 y 23 (elemento actual con la parte ordenada).
  • Desde 10 es mayor que 1 y más pequeño que 23 , insertar 10 entre 1 y 23 .
  • La parte ordenada hasta 2do índice es: [1, 10, 23]

Cuarto pase:

  • Comparar 5 con 1 , 10 , y 23 (elemento actual con la parte ordenada).
  • Desde 5 es mayor que 1 y más pequeño que 10 , insertar 5 entre 1 y 10 .
  • La parte ordenada hasta 3er el índice es : [1, 5, 10, 23]

Quinto pase:

  • Comparar 2 con 1, 5, 10 , y 23 (elemento actual con la parte ordenada).
  • Desde 2 es mayor que 1 y más pequeño que 5 insertar 2 entre 1 y 5 .
  • La parte ordenada hasta 4to índice es: [1, 2, 5, 10, 23]

Matriz final:

  • La matriz ordenada es: [1, 2, 5, 10, 23]
Práctica recomendada Ordenación por inserción ¡Pruébelo!

Implementación de ordenación por inserción:

C++
// C++ program for insertion sort #include  using namespace std; // Function to sort an array using // insertion sort void insertionSort(int arr[], int n) {  int i, key, j;  for (i = 1; i < n; i++) {  key = arr[i];  j = i - 1;  // Move elements of arr[0..i-1],  // that are greater than key,   // to one position ahead of their  // current position  while (j>= 0 && arreglo[j]> clave) { arreglo[j + 1] = arreglo[j];  j = j - 1;  } arr[j + 1] = clave;  } } // Una función de utilidad para imprimir una matriz // de tamaño n void printArray(int arr[], int n) { int i;  para (yo = 0; yo< n; i++)  cout << arr[i] << ' ';  cout << endl; } // Driver code int main() {  int arr[] = { 12, 11, 13, 5, 6 };  int N = sizeof(arr) / sizeof(arr[0]);  insertionSort(arr, N);  printArray(arr, N);  return 0; } // This is code is contributed by rathbhupendra>
C
// C program for insertion sort #include  #include  /* Function to sort an array using insertion sort*/ void insertionSort(int arr[], int n) {  int i, key, j;  for (i = 1; i < n; i++) {  key = arr[i];  j = i - 1;  /* Move elements of arr[0..i-1], that are  greater than key, to one position ahead  of their current position */  while (j>= 0 && arreglo[j]> clave) { arreglo[j + 1] = arreglo[j];  j = j - 1;  } arr[j + 1] = clave;  } } // Una función de utilidad para imprimir una matriz de tamaño n void printArray(int arr[], int n) { int i;  para (yo = 0; yo< n; i++)  printf('%d ', arr[i]);  printf('
'); } /* Driver program to test insertion sort */ int main() {  int arr[] = { 12, 11, 13, 5, 6 };  int n = sizeof(arr) / sizeof(arr[0]);  insertionSort(arr, n);  printArray(arr, n);  return 0; }>
Java
// Java program for implementation of Insertion Sort public class InsertionSort {  /*Function to sort array using insertion sort*/  void sort(int arr[])  {  int n = arr.length;  for (int i = 1; i < n; ++i) {  int key = arr[i];  int j = i - 1;  /* Move elements of arr[0..i-1], that are  greater than key, to one position ahead  of their current position */  while (j>= 0 && arreglo[j]> clave) { arreglo[j + 1] = arreglo[j];  j = j - 1;  } arr[j + 1] = clave;  } } /* Una función de utilidad para imprimir una matriz de tamaño n*/ static void printArray(int arr[]) { int n = arr.length;  para (int i = 0; i< n; ++i)  System.out.print(arr[i] + ' ');  System.out.println();  }  // Driver method  public static void main(String args[])  {  int arr[] = { 12, 11, 13, 5, 6 };  InsertionSort ob = new InsertionSort();  ob.sort(arr);  printArray(arr);  } }; /* This code is contributed by Rajat Mishra. */>
Pitón
# Python program for implementation of Insertion Sort # Function to do insertion sort def insertionSort(arr): # Traverse through 1 to len(arr) for i in range(1, len(arr)): key = arr[i] # Move elements of arr[0..i-1], that are # greater than key, to one position ahead # of their current position j = i-1 while j>= 0 y clave< arr[j] : arr[j + 1] = arr[j] j -= 1 arr[j + 1] = key # Driver code to test above arr = [12, 11, 13, 5, 6] insertionSort(arr) for i in range(len(arr)): print ('% d' % arr[i]) # This code is contributed by Mohit Kumra>
C#
// C# program for implementation of Insertion Sort using System; class InsertionSort {  // Function to sort array  // using insertion sort  void sort(int[] arr)  {  int n = arr.Length;  for (int i = 1; i < n; ++i) {  int key = arr[i];  int j = i - 1;  // Move elements of arr[0..i-1],  // that are greater than key,  // to one position ahead of  // their current position  while (j>= 0 && arreglo[j]> clave) { arreglo[j + 1] = arreglo[j];  j = j - 1;  } arr[j + 1] = clave;  } } // Una función de utilidad para imprimir // matriz de tamaño n static void printArray(int[] arr) { int n = arr.Length;  para (int i = 0; i< n; ++i)  Console.Write(arr[i] + ' ');  Console.Write('
');  }  // Driver Code  public static void Main()  {  int[] arr = { 12, 11, 13, 5, 6 };  InsertionSort ob = new InsertionSort();  ob.sort(arr);  printArray(arr);  } } // This code is contributed by ChitraNayal.>
JavaScript
>
PHP
 // PHP program for insertion sort // Function to sort an array // using insertion sort function insertionSort(&$arr, $n) { for ($i = 1; $i < $n; $i++) { $key = $arr[$i]; $j = $i-1; // Move elements of arr[0..i-1], // that are greater than key, to  // one position ahead of their  // current position while ($j>= 0 && $arr[$j]> $clave) { $arr[$j + 1] = $arr[$j]; $j = $j - 1; } $arr[$j + 1] = $clave; } } // Una función de utilidad para // imprimir una matriz de tamaño n function printArray(&$arr, $n) { for ($i = 0; $i< $n; $i++) echo $arr[$i].' '; echo '
'; } // Driver Code $arr = array(12, 11, 13, 5, 6); $n = sizeof($arr); insertionSort($arr, $n); printArray($arr, $n); // This code is contributed by ChitraNayal. ?>>

Producción
5 6 11 12 13>

Complejidad del tiempo: O(N^2)
Espacio Auxiliar: O(1)

Análisis de complejidad del ordenamiento por inserción :

Complejidad temporal del ordenamiento por inserción

  • Mejor caso: En) , Si la lista ya está ordenada, donde n es el número de elementos de la lista.
  • Caso promedio: En 2 ) , Si la lista está ordenada aleatoriamente
  • Peor de los casos: En 2 ) , Si la lista está en orden inverso

Complejidad espacial de ordenación por inserción

  • Espacio Auxiliar: O(1), la ordenación por inserción requiere O(1) espacio adicional, lo que lo convierte en un algoritmo de clasificación que ahorra espacio.

Ventajas de tipo de inserción:

  • Sencillo y fácil de implementar.
  • Algoritmo de clasificación estable.
  • Eficiente para listas pequeñas y listas casi ordenadas.
  • Espacio eficiente.

Desventajas de tipo de inserción:

  • Ineficiente para listas grandes.
  • No es tan eficiente como otros algoritmos de clasificación (por ejemplo, clasificación por combinación, clasificación rápida) en la mayoría de los casos.

Aplicaciones de tipo de inserción:

La ordenación por inserción se usa comúnmente en situaciones donde:

  • La lista es pequeña o casi ordenada.
  • La simplicidad y la estabilidad son importantes.

Preguntas frecuentes sobre la clasificación por inserción

P1. ¿Cuáles son los casos límite del algoritmo de ordenación por inserción?

pruebas de software

La ordenación por inserción toma el tiempo máximo para ordenar si los elementos se ordenan en orden inverso. Y lleva un tiempo mínimo (orden de n) cuando los elementos ya están ordenados.

P2. ¿Cuál es el paradigma algorítmico del algoritmo de ordenación por inserción?

El algoritmo de ordenación por inserción sigue un enfoque incremental.

P3. ¿Es Insertion Sort un algoritmo de clasificación in situ?

Sí, la clasificación por inserción es un algoritmo de clasificación in situ.

P4. ¿Es la ordenación por inserción un algoritmo estable?

Sí, la clasificación por inserción es un algoritmo de clasificación estable.

P5. ¿Cuándo se utiliza el algoritmo de ordenación por inserción?

La ordenación por inserción se utiliza cuando el número de elementos es pequeño. También puede resultar útil cuando la matriz de entrada está casi ordenada y solo unos pocos elementos están fuera de lugar en una matriz grande y completa.