¿Existe algún algoritmo de clasificación con O (n) en el tiempo y O (n ^ 2) en la complejidad del espacio?

Técnicamente sí, porque:

  • Hay algoritmos de clasificación especializados que se ejecutan en O (n)
  • Big-Oh solo denota un límite superior

Dicho esto, para cualquier algoritmo secuencial (independientemente de si ordena o hace algo completamente diferente) la complejidad del espacio es como máximo igual a la complejidad del tiempo, porque en los pasos x el programa solo puede acceder a las celdas de memoria O (x). Por lo tanto, cualquier cosa que se ejecute en tiempo O (n) solo puede usar memoria O (n).

(Nota al pie: hay modelos de cómputo donde la afirmación anterior no es cierta. En estos modelos, uno puede asignar rápidamente grandes fragmentos de memoria que no se han inicializado a ningún valor específico. Si cuenta toda la memoria asignada como se usa, en estos modelos un programa puede usar más espacio que tiempo. Gracias a Igor Markov por señalar esto en la discusión. Lea nuestros comentarios y / o comentarios si desea saber más sobre esto).

Creo que O (n log (n)) es lo mejor que puede hacer si estamos contando operaciones en una máquina. Puede optimizar el algoritmo que elija dependiendo de cuán aleatorios / bien ordenados estén los datos.

Para ser sincero, la diferencia práctica en el tiempo entre O (n) y O (n log (n)) es muy pequeña en comparación con decir O (n log (n)) y O (n ^ 2).