Hola.
Para realizar la ordenación Shell has de elegir primeramente un incremento. El propuesto por Shell es
h = n/2, donde
n es el número de elementos del vector.
Una vez elegido el incremento
h, el algoritmo lo dividirá entre dos en cada iteración, hasta que sea 1. Así, tendrá este aspecto:
h = n
do {
h = h / 2
...
hace una pasada
...
} while (h > 1)
Lo que vamos a hacer en cada pasada es ordenar por inserción
h subvectores. Cada vector se puede definir como
- Vk = { Ni / i = m*h+k }, i,k,m naturales positivos, k<h</li>
Esto como mejor se ve es con un ejemplo (he tabulado los subvectores para que se vea claramente cómo se generan):
Vector: 3 7 2 3 5 8 6 5 3 6 7 9
Tamaño: 12
h inicial: 6=12/2
Subvectores:
V0: 3 6
V1: 7 5
V2: 2 3
V3: 3 6
V4: 5 7
V5: 8 9
En la siguiente iteración los vectores que se generarían son (hay que tener en cuenta que no los he ordenado, pero se supone que se tiene que ordenar cada uno independientemente por inserción):
Vector: 3 7 2 3 5 8 6 5 3 6 7 9
Tamaño: 12
h: 3 = 6/2
Subvectores:
V0: 3 3 6 6
V1: 7 5 5 7
V2: 2 8 3 9
Creo que con esta explicación ya no te será difícil implementar la ordenación Shell.
Un saludo.
Ruben3d