¿Por qué hay una diferencia de complejidad de tiempo entre los algoritmos de clasificación en Java cuando estoy usando Integer e integer?

La principal diferencia en la complejidad se debe al hecho de que cuando usa la palabra entero, básicamente le está diciendo al compilador que mi matriz es de enteros o int en C ++, pero el tiempo que cambió para usar la palabra Integer para su matriz, ahora tiene le dije al compilador que mi matriz está compuesta de objetos Integer.

long, int, char son tipos de datos primitivos en Java y el algoritmo de clasificación incorporado para ellos, que es

Colecciones.sort (a);
o
Arreglos.sort (a);

es en realidad una variante de quicksort.

Ahora quicksort tiene la peor complejidad temporal de [math] O (n ^ 2) [/ math]. Esta es la razón principal por la que su código no fue aceptado.

Ahora, tan pronto como cambiaste a la matriz Integer y usaste el mismo algoritmo de ordenación nuevamente, se convirtió en una variante de merge-sort. Sí, el algoritmo de ordenación de Java se comporta solo de esta manera. Utiliza la versión de clasificación de fusión para todos los objetos que usa, ya sean tipos de datos de referencia básicos como Integer, Long o cualquiera de sus propios objetos implementados.

Merge-sort tiene una complejidad de tiempo de peor caso de [math] O (nlogn) [/ math]. Esta es la razón por la cual su código pudo pasar los límites de tiempo en este caso.

Nota : los objetos que crea en Java se ordenan por esta variante de clasificación de combinación solo con la única diferencia de que ahora debe implementar / hacer una clase de comparación para ellos.

Espero que esto ayude.

Todo lo mejor.