Saltar al contenido principal

Ordenar un arreglo

Consideremos el problema de ordenar A[1,n]A[1,n]. Ordenar implica aplicar una permutación π\pi al rango [1,n][1,n] de modo que AA quede ordenado. Esto significa que la permutación original que traían los elementos de AA, ρ\rho, es la inversa de π\pi. Para cada ρ\rho posible, un algoritmo correcto de ordenamiento debe aplicar un conjunto distinto de operaciones π=ρ1\pi = \rho^{-1}. Un algoritmo que procede únicamente por comparaciones puede entonces utilizarse para codificar la permutación π\pi (o ρ\rho) de la misma manera que en el ejemplo anterior: los resultados de las comparaciones que va realizando (ignorando las modificaciones que hace al arreglo o cualquier otra operación) deben ser distintas para cada input posible ρ\rho.

Dado que existen n!n! posibles permutaciones en las que AA puede presentarse, el algoritmo necesita realizar al menos log2(n!)\log_2 (n!) comparaciones para poder realizar un conjunto de acciones distinto para cada una de ellas. Por la aproximación de Stirling, log2(n!)=nlog2nO(n)\log_2 (n!) = n\log_2 n - O(n). Dicho más gruesamente, para ordenar por comparaciones se necesita tiempo Ω(nlogn)\Omega(n\log n).