Cómo hacer que el código de una ordenación de inserción sea más optimizado utilizando una lista vinculada

He hecho esto

/ **

* Definición de lista individualmente vinculada.

* struct ListNode {

* int val;

* ListNode * next;

* ListNode (int x): val (x), next (NULL) {}

*};

* /

Solución ListNode * :: insertionSortList (ListNode * A) {

int cuenta = 0;

ListNode * temp = new ListNode (0);

ListNode * start = new ListNode (0);

ListNode * key = new ListNode (0);

ListNode * prev = new ListNode (0);

temp = A;

while (temp! = NULL) {

recuento ++;

temp = temp-> siguiente;

}

if (cuenta == 1 || A == NULL)

devolver A;

más{

for (int i = 2; i <= count; i ++) {

int j = i-1, k = 1;

inicio = A;

mientras que (k <j) {

k ++;

inicio = inicio-> siguiente;

}

clave = inicio-> siguiente;

temp = A;

prev = NULL;

while (j> = 1 && temp! = NULL && temp-> val val) {

prev = temp;

temp = temp-> siguiente;

j–;

}

si (j == 0)

Hacer continuación;

si no (anterior == NULL) {

inicio-> siguiente = tecla-> siguiente;

clave-> siguiente = A;

A = clave;

}más{

prev-> siguiente = clave;

inicio-> siguiente = tecla-> siguiente;

clave-> siguiente = temp;

}

}

}

devolver A;

}

La complejidad temporal de la ordenación por inserción es O (n ^ 2). Hay dos factores que hacen que la complejidad de la inserción en el peor de los casos se ordene a O (n ^ 2), el primero es encontrar la posición correcta de un elemento en una lista ya ordenada y el segundo es hacer espacio para ese elemento.

Supongamos que si usamos Array para la implementación de la Clasificación de inserción, en el peor de los casos, cuando Array ya está ordenado en orden descendente, habrá n (n-1) / 2 comparaciones y n (n-1) / 2 cambios, por lo tanto, TC global es O (n ^ 2).

Si usamos la lista enlazada para nuestra implementación como para insertar un elemento en la Lista enlazada, se requiere O (1) tiempo constante. Pero no hay mejora en la complejidad del tiempo, incluso si usamos LL porque todavía habrá n (n-1) / 2 comparaciones en el peor de los casos.

¡Entonces no hay mejora en la Complejidad del Tiempo!

More Interesting

Dado un volumen que consiste en un número de ubicaciones dentro de un espacio tridimensional definido, y a cada una de estas ubicaciones se le asigna algún número, ¿hay alguna métrica obvia que se pueda aplicar que mida la complejidad de la distribución de las mediciones?

¿Hay alguna manera de extraer la palabra principal de una lista de sinónimos que representa la lista?

¿Cuál es la forma correcta de leer CLRS (Introducción a los algoritmos)?

¿Cuándo deberíamos considerar el uso de algoritmos recursivos al escribir un programa? Discuta en términos de ventajas y desventajas.

¿Por qué la clasificación rápida se considera una clasificación inestable?

¿Cuáles son los algoritmos de clasificación considerados algoritmos codiciosos?

Cómo demostrar que la mochila continua con elementos de opción múltiple es un problema NP-difícil

¿Cuál es la mejor manera de ordenar un terabyte de matriz de datos, cuando tiene RAM limitada (500k), y cada elemento de la matriz tiene un par de elementos de datos, de aproximadamente 1-10k cada uno?

Cómo hacer para vender con éxito el algoritmo de negociación de fx

¿Por qué son buenos los algoritmos de código abierto?

¿Puede una máquina Turing aceptar una cadena de longitud 2014? ¿Por qué este problema es indecidible?

¿Qué algoritmo (s) de aprendizaje automático es el mejor para la regresión no lineal con un número limitado de datos?

Cómo elegir métricas de error para el algoritmo de aprendizaje automático

Cómo insertar un nuevo nodo en un árbol binario (no buscar árbol binario)

¿Cómo se le ocurrió al autor la fórmula (programación dinámica) en la editorial CIELRCPT - Editorial (Ciel y Receipt)?