Ordenación Elemental
Número de ejecuciones de un programa
Para analizar la eficiencia de un algoritmo, es necesario contar el número de veces que se ejecutan las instrucciones.
Para contar cuántas veces se ejecuta una operación, debemos tener en cuenta todos los comandos disponibles.
En el comando no se ejecuta ninguna operación, por lo que el número de operaciones es 0.
En el caso de , debemos tener en cuenta que la siguiente ecuación vale si no hay interés en contar las operaciones que involucran el índice .
Para contamos cuantas veces se ejecuta durante la evaluiación de y luego cuantas en la ejecución de y (caso verdadero y falso)
Para la asignación, debemos considerar el caso de modificación de la variable. Debemos considerar que tal vez, el nuevo valor es la llamada a una función que también tiene un costo.
Para las expresiones, consideramos el caso de contar comparaciones:
En el caso de los ciclos () tenemos que:
Donde es el número de veces que el cuerpo del ciclo se ejecuta, y s el número de operaciones que se ejecutan en la -ésima iteración.
Ordenación por selección (Selection Sort)
Este algoritmo consiste en seleccionar el menor elemento de un arreglo e intercambiarlo por el que está en la primera posición. Luego el menor elemento de los siguientes a la primera posición va en la segunda posición, y asi sucesivamente.
Veamos como aplicar este algoritmo en un arreglo:

El arreglo es una permutación del original. A partir del segmento los elementos menores del arreglo están ordenados (invariante del ciclo).
Si quisieramos escribir este algoritmo en pseudocódigo, primero podemos escribir un procedimiento que recorra el arreglo, llamando una función que nos devuelva la posición del menor elemento a partir de una posición dada. Luego, intercambiamos el elemento de la posición actual con el menor elemento encontrado con un procedimiento.
El sería:
Para hacer , podemos seguir la siguiente lógica:

El invariante es igual al anterior, pero ahora incluimos el mínimo del segmento en la posición .
Una manera de hacer lo mismo y con menos código es usando :
De esta forma, las variables que sirven de índices estan declaradas en el contexto/scope de
Ordenación por inserción (Insertion Sort)
Este algoritmo consiste en insertar un elemento en la posición correcta de un arreglo ordenado. Se comprueba si el elemento es menor al anterior, y si lo es, se intercambian.
Veamos como aplicar este algoritmo en un arreglo:

El arreglo es una permutación del original. Un segmento inicial del arreglo está ordenado, en general, no contiene los mínimos del arreglo (invariante del ciclo).
Si quisieramos escribir este algoritmo en pseudocódigo, podemos escribir un procedimiento que recorra el arreglo, utilizando un procedimiento que se encargue de insertar un elemento en la posición correcta.
Para hacer , podemos seguir la siguiente lógica:

Como invariante, tenemos que es una permutación de , el segmento sin celda está ordenado y, también está ordenado.
(Se utiliza el mismo que en el algoritmo de selección). Tanto este algoritmo como el de selección tienen complejidad cuadrática (en el peor caso), ya que sería necesario recorrer el arreglo completo en cada iteración.