Sí, la complejidad de la clasificación depende de lo que esté clasificando y de cómo compare los elementos. Como se relacionó anteriormente, la mejor complejidad posible de un algoritmo de clasificación basado en la comparación es la comparación [matemática] O (n log n) [/ matemática].
Pero para ordenar enteros, puede usar algoritmos especializados, con tiempo de ejecución dependiendo de qué tan grandes sean sus enteros (es decir, el tamaño de la palabra). Si está ordenando números enteros en un rango pequeño, digamos 0 a [matemática] m [/ matemática], puede usar la ordenación de cubetas para ordenar en [matemática] O (m + n) [/ matemática]. Ver Clasificación de enteros – Wikipedia para más detalles: estos algoritmos se vuelven mucho más complejos.
Por supuesto, aparte de la clasificación de cubetas, estos algoritmos de clasificación de enteros se enumeran en “teóricos” por una razón: están optimizando la complejidad algorítmica, no el tiempo de ejecución real. Agregan capas de abstracción e indirección que agregan varios multiplicadores al tiempo de ejecución verdadero y son mucho más difíciles de implementar que los algoritmos de clasificación convencionales.
- ¿Es una mala idea usar Python para aprender algoritmos y programación competitiva?
- ¿Cuál es la mejor manera de aprender la estructura de datos y el algoritmo para un programador promedio?
- En F (n) -F (n-1) = n ^ 8, ¿qué es F (n)?
- ¿Qué es el recorrido NAT y por qué debería usarlo?
- ¿Las estructuras en lenguaje C son similares a los objetos en Java?
Como otro ejemplo, comparar cadenas con longitud variable agrega otra capa de complejidad, ya que comparar cadenas puede requerir varias operaciones. Un algoritmo para esto es la selección rápida de teclas múltiples.