Dado que el problema ha fijado tamaño e incluye un conjunto finito de los casos, cualquier algoritmo de ordenación terminará en O (1). Debe decirle al probador que regrese a la escuela de análisis de algoritmos. Una forma posible de generalizar este problema a un conjunto infinito es: tiene una matriz de tamaño n con números que varían en [0, 10n]. ¿Puedes ordenarlo en O (n)? Eso tiene sentido para mí. O podrías parametrizar el problema con el tamaño de la matriz y el rango de los enteros y obtener un límite de O (f (n, k)). El problema es cuando recibes una pregunta como esta en una entrevista, ¿qué haces? ¿Tratas de adivinar qué le gustaría escuchar al entrevistador o dices algo como "déjame reformular tu pregunta"? ¿O simplemente te desplazas hacia la salida con una gran sonrisa?
Clasificación de conteo: http://en.wikipedia.org/wiki/Counting_sort –
@Paul R: El artículo de Wikipedia dice que es O (n + k), y solo es eficiente si n> k. En este caso n = 100,000 yk = 1,000,000. –
Or radix sort (1 millón es 20 bits, por lo que 20 pasa más de 100.000 enteros en el caso ingenuo; el recuento ingenuo requiere que ponga a cero el millón de contadores (no usar una tabla hash, pero no clave los resultados en orden) , por lo que debe ordenarlo, utilizando un mapa de árbol no, pero la inserción de tiempo no constante) y luego iterar sobre ellos para obtener el resultado, que también es del orden de 2 millones de operaciones; clasificación de raíz binaria puede ser hecho en su lugar por lo que no requiere almacenamiento adicional. –