Está en la página 1de 13

Mtodo de

Ordenamiento
Shell Sort

*Paulina Carmona Turrubiates


*David Eduardo Gallegos Lpez
*Marisol Ontiveros Campos
*San Juanita De Dios Yajaira
Paz Cortina
*Ismael de Jess Quezada
Martnez
Es una mejora del mtodo de
insercin directa que se
utiliza cuando el nmero de
elementos a ordenar es
grande.

El mtodo se denomina
shell en honor de su
inventor Donald shell y
tambin mtodo de insercin
con incrementos
decrecientes.
El Shell Sort es una
generalizacin
del ordenamiento por
insercin , teniendo en
cuenta dos observaciones:

*El ordenamiento por


insercin es eficiente si la
entrada est "casi
ordenada".
*El ordenamiento por
insercin es ineficiente, en
general, porque mueve los
valores slo una posicin
cada vez.
En el mtodo de clasificacin
por insercin, cada elemento
se compara con los elementos
contiguos de su izquierda, uno
tras otro. Si el elemento a
insertar es ms pequeo - por
ejemplo -, hay que ejecutar
muchas comparaciones antes
de colocarlo en su lugar
definitivamente.

Shell modifico los saltos contiguos


resultantes de las comparaciones por
saltos de mayor tamao y con eso se
consegua la clasificacin ms rpida. El
mtodo se basa en fijar el tamao de los
saltos constantes, pero de mas de una
posicin.
El mtodo se basa en tomar como salto N/2 (siendo N el numero
de elementos) y luego reduciendo a la mitad en cada repeticin
hasta que el salto o distancia vale 1.

Considerando la variable salto, se tendra para el caso de un


determinado vector X los siguientes recorridos:
Vector X [X[1], X[3], ,X[N]]
Vector X1 [X[1], X[1] + salto, X[2], ]
Vector XN [salto1, salto2, salto3, ]
EJEMPLO :
Deducir las secuencias parciales de clasificacin por el mtodo de
Shell para ordenar en ascendente la lista o vector.
6, 1, 5, 2, 3, 4, 0

RECORRIDO SALTO LISTA REORDENADA INTERCAMBIO

1 3 2,1,4,5,0,3,5,6 (6,2), (5,4), (6,0)

2 3 0,1,4,2,3,5,6 (2,0)

3 3 0,1,4,2,3,5,6 NINGUNO

4 1 0,1,2,3,4,5,6 (4,2),(4,3)

5 1 0,1,2,3,4,5,6 NINGUNO
Sea un vector X:
X[1], X[2], X[3], X[N]
Y consideremos el primer salto a dar
que tendr un valor de N/2
Por lo que, para reordenar, se tomara
parte entera. N DIV 2
e iguala a salto Salto = N DIV 2

Private Sub Command1_Click()


Dim l(1 To 20), salto As Integer
n = InputBox("digite el nmero
elementos de la lista", "control de
entrada")
For i = 1 To n
l(i) = InputBox("digite el nmero",
"control de entrada")
Next i
salto = n / 2
While salto > 0
For i = (salto + 1) To n
j = i - salto
While j > 0
k = j + salto
If l(j) <= l(k) Then
j=0
Else
aux = l(j)
l(j) = l(k)
l(k) = aux
End If
j = j - salto
Wend
Next i
salto = salto / 2
Wend
For i = 1 To n
Print l(i)
Next i
End Sub
K=N/2
N=6
K=6/2= 3

3 2 8 1 9 3

8 3

1 2 3 3 9 8
K=N/2
N=3
K=3/2= 1.5

1 2 3 3 9 8

1 2

1 2 8 3 9 3
1 2 3 3 9 8
2 3
1 2 3 3 9 8

3 3
1 2 3 3 9 8
3 9
1 2 3 3 9 8
9 8
1 2 3 3 8 9

1 2 3 3 8 9
Bibliografa
y Webliografa:
www.it.uc3m.es/tsps/lab/8/skel/**ShellSort
**.**java**

También podría gustarte