Inserción

El algoritmo de Inserción fue mencionado por John William Mauchly en 1.946. Entre los algoritmos de ordenación simple es la mejor opción, realiza un menor número de comparaciones respecto del de burbuja y del de selección. Compara los elementos del vector según lo recorre, desplazando los existentes si el actual es mayor o menor (según la implementación), de tal forma que los elementos ordenados quedan en uno de los extremos del vector.John William Mauchly

 

Rendimiento – Complejidad
Mejor caso Ω
Peor caso O
Media Θ
Espacio
(n) (n2) (n2) O(1)

 

Es estable, adaptable, in situ y en linea. Quizás su mayor fortaleza radica en evitar comparaciones innecesarias cuando los datos están parcialmente ordenados. Es muy eficiente para conjuntos pequeños de datos, aunque pertenezca al grupo de algoritmos de clasificación cuadrática O(n2), que son los que peor rendimiento ofrecen (Burbuja, Selección, etc). Si la secuencia de entrada está ordenada o parcialmente ordenada solo verifica el orden y no realiza ningún movimiento o pocos, en este caso la complejidad se acerca O(n). Se usa en muchas ocasiones como apoyo en algoritmos más complejos (Timsort).

 

Inserción Binaria.

La Inserción Binaria es idéntica al algoritmo de inserción salvo que utiliza la búsqueda binaria para encontrar el lugar adecuado para la inserción. Esta versión tiene un menor número de comparaciones O(n log n), pero la complejidad promedio es O (n2 ), esto no es una mejora importante. La inserción en sus dos versiones sólo son convenientes en vectores muy pequeños.

 

 

Ejemplos.

 

public static int[] Ordenainsercion(int[] Vector) {
    {
      int longitudV = Vector.length;
      for (int i = 1; i < longitudV; ++i) {
        int actual = Vector[i];
        int j = i - 1;
        while (j >= 0 && Vector[j] > actual) {
          Vector[j + 1] = Vector[j];
          j = j - 1;
        }
        Vector[j + 1] = actual;
      }
    }
    return Vector;
  }

 

 

public static int[] OrdenaInsercionBinaria (int[] Vector) {
    int n = Vector.length;
    int mayor = 0;
    int menor = 0;
    int medio = 0;
    int v =0;
    for (int i = 1; i < n; i++) {
      v = Vector[i];
      menor = 0;
      mayor = i;
      while (menor < mayor) {
        medio = menor + (mayor - menor) / 2;
        if (v < Vector[medio])
          mayor = medio;
        else
          menor = medio + 1;
      }
      for (int j = i; j > menor; --j)
        Vector[j] = Vector[j - 1];
      Vector[menor] = v;
    }
    return Vector;
  }

 

 

Rendimiento.

Estadística individual realizada con el mismo equipo y condiciones del resumen de estadísticas de ordenación. Destacar los datos completamente planos al tratar vectores ya clasificados de forma ascendente, para el resto y a partir de más de 1.000 elementos, recordando, son algoritmos desaconsejables.

Rendimiento algoritmo de ordenación por sort Inserción de 10 a 100mil

 

 

Rendimiento algoritmo sort Inserción a 100mil a 1millón de elmentos

 

 

Rendimiento algoritmo sort Inserción Binaria de 10 a 100mil elmentos

Rendimiento algoritmo sort Inserción Binaria a 100mil a 1millón de elmentos