R1 R2 R3 Ri Rn
........------------------.......--------.......--------.......
| K1 | K2 | K3 | | Ki | | Kn | n slots
........------------------.......--------.......--------.......
R0 R1 R2 R3 Ri Rn
...-----------------------.......--------.......--------.......
| K0 | K1 | K2 | K3 | | Ki | | Kn | n + 1 slots
...-----------------------.......--------.......--------.......
En el ejemplo pueden observarse como evoluciona el subconjunto de
registros ordenados, subconjunto que está cerrado entre corchetes.
Se aprecian también la variable del loop i y la posición de comienzo
y final del subconjunto ya ordenado.
R0 R1 R2 R3 R4 R5
Subarchivo
5 4 3 2 1 Secuencia Inicial Desde Hasta
[ -999 ] 5 4 3 2 1 i = 0 0 0
[ -999 5 ] 4 3 2 1 i = 1 0 1
[ -999 4 5 ] 3 2 1 i = 2 0 2
[ -999 3 4 5 ] 2 1 i = 3 0 3
[ -999 2 3 4 5 ] 1 i = 4 0 4
[ -999 1 2 3 4 5 ] i = 5 0 5
R0 R1 R2 R3 R4 R5
Subarchivo
2 3 4 5 1 Secuencia Inicial Desde Hasta
[ -999 ] 2 3 4 5 1 i = 0 0 0
[ -999 2 ] 3 4 5 1 i = 1 0 1
[ -999 2 3 ] 4 5 1 i = 2 0 2
[ -999 2 3 4 ] 5 1 i = 3 0 3
[ -999 2 3 4 5 ] 1 i = 4 0 4
[ -999 1 2 3 4 5 ] i = 5 0 5
Este procedimiento ubica ordenadamente el registro R dentro del subarchivo
que vá desde el registro R0 hasta el registro Ri, subarchivo que yá está
ordenado.
Antes del procedimiento el subarchivo ordenado tiene i + 1 registros, debido
a la presencia del registro R0.
Como consecuencia del procedimiento el subarchivo ordenado crece en un
registro, o sea, se eleva a i + 2.
donde :
K K K K K
> < < < <
Km-1 Km Km+1 Ki-1 Ki
R0 R1 R2 R3 Rm-1 Rm Rm+1 Ri-1 Ri Ri+1
..-----------------------.......----------------.......----------------.....................................
| K0 | K1 | K2 | K3 | |Km-1| Km |Km+1| |Ki-1| Ki | ** | ** Se asume libre para ser usado i + 2 slots
..-----------------------.......----------------.......----------------.....................................
*---* . . . . . . . . . . .
R | K |.................>.................. ..>. ..>. ..>. ..>. ..>.
*---*
<------------------------ i ----------------------------->
<---------------------------- i+1 ---------------------------->
<---------------------------- i+2---------------------------------->
Observar que la creación de R0 simplifica el while, evitando controlar
el fin de archivo, en este caso debería hacerse a través de la interrogación
de si j < 1.
Con la disposición mostrada el while siempre termina, ya que K < Kj en
algún momento es falso, aunque mas no sea al alcanzar K0.
Debido a este hecho de insertar un registro en un subarchivo ordenado, es
que recibe el nombre de clasificación por inserción.
Observar que en el peor caso, este algoritmo hace i + 1 comparaciones antes
de hacer la insercion. Por lo tanto su orden de magnitud es lineal, del
tipo O(i).
Este procedimiento utiliza el procedimiento anterior.
Donde :
En el siguiente dibujo, T es un slot auxiliar para guardar temporariamente
un registro, el registro de la iteracion dentro del loop.
T
*---*
| | <......................................
*---* .
. K K K K K .
. > < < < < .
. Km-1 Km Km+1 Kj-2 Kj .
....>..... .
. .
R0 R1 R2 R3 Rm-1 Rm Rm+1 Rj-2 Rj-1 Rj Rn
........-----------------------.......----------------.......----------------.......--------.......
| K0 | K1 | K2 | K3 | |Km-1| Km |Km+1| |Kj-2|Kj-1| Rj | | Kn | n + 1 slots
........-----------------------.......----------------.......----------------.......--------.......
. . . . . . . . . . . .
.>.. .>.. .>.. .>.. .>.. .>..
<----------------------- j-1 ---------------------------->
<----------------------------- j ----------------------------->
<---------------------------- j+1---------------------------------->
Este procedimiento invoca a INSERT para i = 2, ..., n, con lo que
en el peor caso, las comparaciones suman 2 + 3 + 4 + ... + ( n - 1 + 1 ),
lo que nos lleva a un orden de magnitud del tipo O(n**2), n veces n, n**2.
El tiempo de ejecución de este algoritmo depende del grado de desorden
del juego de registros en su estado original y en el peor caso es O(n**2).
Este método de clasificación es muy rápido para clasificar entre 20 y
25 registros, dependiendo de la implementación y propiedades de la máquina
donde corre.