Algoritmo de Ordenación Shell
Las operaciones del algoritmo se podrían esquematizar como sigue:
- Tomar una distancia de comparación inicial.
- Ordenar entre sí los elementos situados a esa distancia.
- Reducir la distancia de comparación. Si es mayor o igual que 1, volver al paso 2.
PSEUDOCÓDIGO
MÓDULO ordenacion_shell
DATOS
PARÁMETROS
Transforma V() de tipo T
Recibe N entera
VARIABLES
I, J, DISTANCIA, AUX enteras
INICIO
DISTANCIA ← N
Mientras ( DISTANCIA ≠ 1 ) hacer
DISTANCIA ← DISTANCIA\2 ** división entera
Para I desde DISTANCIA+1 hasta N
AUX ← V(I)
J ← I
Mientras ( (J-DISTANCIA) ≥ 1) y (V(J-DISTANCIA) > AUX) ) hacer
V(J) ← V(J-DISTANCIA)
J ← J-DISTANCIA
fin-mientras
V(J) ← AUX
fin-para
fin-mientras
FIN
CÓDIGO C
/*Ordena un vector (de menor a mayor) por el método de ordenación por shell*/
shell(int *v, int n)
{
int i, j, dist, aux;
dist=n;
while(dist!=1)
{
dist=dist/2;
for(i=dist;i<n;i++)
{
aux=v[i];
j=i;
while((j-(dist-1)>=1) && (v[j-dist]>aux))
{
v[j]=v[j-dist];
j=j-dist;
}
v[j]=aux;
}
}
}
Comentarios
Publicar un comentario