2022-05-09
$\text{Ordenar} : \text{arreglo}[\alpha] \to \text{arreglo}[\alpha]$, donde $\alpha$ es un tipo tal que está definida la relación $<_{\alpha}$.
Un algoritmo de ordenamiento es estable si dos registros $i$ y $j$ con claves de ordenamiento iguales mantienen su orden relativo una vez ordenado el arreglo.
De forma coloquial, si la posición $i$ y $j$ guardan el mismo valor, luego de aplicarle al arreglo un algoritmo de ordenamiento estable podríamos estar seguros de que $i$ y $j$ seguirían manteniendo sus posiciones relativas.
En cambio, de aplicarle un algoritmo de ordenamiento inestable no podríamos asegurarnos de esto.
Algoritmo:
Repetir para las posiciones sucesivas $i$ del arreglo:
Invariante:
Complejidad:
Contamos con $n - 1$ ejecuciones del ciclo principal, y en la $i$-ésima iteración debemos encontrar el mínimo de entre $n - 1$ elementos y por lo tanto necesitamos $n - i - 1$ comparaciones.
$$ T(n) = \sum_{i=0}^{n-2}(n-i-1) = \sum_{i=1}^{n-1}i = \frac{n\cdot (n-1)}{2} \in O(n^2) $$
Notemos que el costo no depende el eventual ordenamiento parcial o total del arreglo. Es decir, la complejidad del peor y mejor caso es la misma.
Estabilidad: Inestable.
Algoritmo:
Repetir para las posiciones sucesivas $i$ del arreglo:
Invariante: