Comprender el algoritmo de ordenación por inserción

    En este tutorial, aprenderá cómo funciona la ordenación por inserción. Además, encontrará ejemplos de ordenación por inserción utilizando lenguaje C.
    El principio de funcionamiento de la clasificación por inserción es similar a cómo clasificamos las cartas del oponente en un juego de cartas.
    Suponiendo que se haya ordenado la primera tarjeta, seleccione una tarjeta sin clasificar. Si la carta sin clasificar es más grande que la carta en la mano, se coloca a la derecha, de lo contrario se coloca a la izquierda. De la misma forma, saca las demás cartas sin clasificar y colócalas en la posición correcta.
    La ordenación por inserción también utiliza un método similar.
    La ordenación por inserción es un algoritmo de ordenación que coloca los elementos no clasificados en la posición adecuada en cada iteración.

¿Cómo funciona la clasificación por inserción?

    Supongamos que necesitamos ordenar la siguiente matriz.
Inserte la descripción de la imagen aquí

  1. Suponga que el primer elemento de la matriz está ordenado. Tome el segundo elemento y guárdelo por separado en la llave.
    Compare la clave con el primer elemento. Si el primer elemento es mayor que la clave, la clave se coloca delante del primer elemento.
    Inserte la descripción de la imagen aquí
  2. Ahora, se han ordenado los 2 primeros elementos.
    Compare el tercer elemento con el elemento de la izquierda. Ponlo detrás de elementos más pequeños. Si no hay ningún elemento más pequeño que él, colóquelo al principio de la matriz.
    Inserte la descripción de la imagen aquí
  3. De manera similar, coloque cada elemento sin clasificar en su posición correcta.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
Pseudocódigo del algoritmo de ordenación por inserción
insertionSort(array)
  mark first element as sorted
  for each unsorted element X
    'extract' the element X
    for j <- lastSortedIndex down to 0
      if current element j > X
        move sorted element to the right by 1
    break loop and insert X here
end insertionSort
C ejemplo
// Insertion sort in C

#include <stdio.h>

// Function to print an array
void printArray(int array[], int size) {
    
    
  for (int i = 0; i < size; i++) {
    
    
    printf("%d ", array[i]);
  }
  printf("\n");
}

void insertionSort(int array[], int size) {
    
    
  for (int step = 1; step < size; step++) {
    
    
    int key = array[step];
    int j = step - 1;

    // Compare key with each element on the left of it until an element smaller than
    // it is found.
    // For descending order, change key<array[j] to key>array[j].
    while (key < array[j] && j >= 0) {
    
    
      array[j + 1] = array[j];
      --j;
    }
    array[j + 1] = key;
  }
}

// Driver code
int main() {
    
    
  int data[] = {
    
    9, 5, 1, 4, 3};
  int size = sizeof(data) / sizeof(data[0]);
  insertionSort(data, size);
  printf("Sorted array in ascending order:\n");
  printArray(data, size);
}
la complejidad

    complejidad del tiempo

  • Peor complejidad del caso: O ( n 2 n ^ 2norte2 )
    Suponga que una matriz está ordenada en orden ascendente y desea ordenarla en orden descendente. En este caso, ocurrirá la complejidad del peor de los casos.
    Cada elemento debe ser comparado con todos los demás elementos, por lo tanto, para cada n elementos, se comparará (n-1) veces.
    Por lo tanto, el número total de comparaciones = n * (n-1) ~n 2 n ^ 2norte2
  • Complejidad en el mejor de los casos: O (n)
    Cuando se ordena la matriz, el ciclo externo se ejecuta n veces, mientras que el ciclo interno no se ejecuta en absoluto. Por lo tanto, solo hay n comparaciones. Por tanto, la complejidad es lineal.
  • Complejidad de caso promedio: O ( n 2 n ^ 2norte2 )
    Cuando el orden de los elementos de la matriz está desordenado (ni ascendente ni descendente).

    Complejidad del
    espacio La complejidad del espacio es O (1) porque se utiliza una clave de variable adicional.

Insertar aplicación de clasificación

    Utilice la ordenación por inserción en las siguientes situaciones:

  • La matriz contiene una pequeña cantidad de elementos.
  • Solo quedan algunos elementos por ordenar
Documentos de referencia

[1] Parewa Labs Pvt. Ltd. Algoritmo de clasificación de inserción [EB / OL] .https: //www.programiz.com/dsa/insertion-sort,2020-01-01.

Supongo que te gusta

Origin blog.csdn.net/zsx0728/article/details/114819325
Recomendado
Clasificación