26
ORDENAMIENTO SHELL

Ordenamiento shell & heapsort

  • Upload
    unmsm

  • View
    1.221

  • Download
    8

Embed Size (px)

Citation preview

Page 1: Ordenamiento shell & heapsort

ORDENAMIENTO SHELL

Page 2: Ordenamiento shell & heapsort

Shell nos propone que hagamos sobre el arreglo una serie de ordenaciones basadas en la inserción directa, pero dividiendo el arreglo original en varios sub-arreglos tales que cada elemento esté separado k elementos del anterior (salto o gap).

ORDENAMIENTO SHELL

Page 3: Ordenamiento shell & heapsort

Se debe empezar con k=n/2, siendo n el número de elementos de arreglo, y utilizando siempre la división entera, después iremos variando k haciéndolo más pequeño mediante sucesivas divisiones por 2, hasta llegar a k=1.

ORDENAMIENTO SHELL

Page 4: Ordenamiento shell & heapsort

Pongamos un ejemplo:

» Se pide ordenar ascendentemente este arreglo

74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30.

n=11

ORDENAMIENTO SHELL

Page 5: Ordenamiento shell & heapsort

1. k=n/2 >>> 11/2=5

74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30

30, 14, 21, 44, 38, 74, 11, 78, 65, 88, 97

ORDENAMIENTO SHELL

Page 6: Ordenamiento shell & heapsort

30, 14, 21, 44, 38, 74, 11, 78, 65, 88, 97

30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97

ORDENAMIENTO SHELL

Page 7: Ordenamiento shell & heapsort

30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97

30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97

ORDENAMIENTO SHELL

Page 8: Ordenamiento shell & heapsort

30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97

30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97

Arreglo 5-ordenado

ORDENAMIENTO SHELL

Page 9: Ordenamiento shell & heapsort

2. k=k/2 >>> 5/2=2

30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97

14, 11, 21, 44, 30, 74, 38, 78, 65, 88, 97

Arreglo 2-ordenado

ORDENAMIENTO SHELL

Page 10: Ordenamiento shell & heapsort

Shell.cpp

ORDENAMIENTO SHELL

3. k=k/2 >>> 2/2=1

14, 11, 21, 44, 30, 74, 38, 78, 65, 88, 97

11, 14, 21, 30, 38, 44, 65, 74, 78, 88, 97

Page 11: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Page 12: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Según Williams[2001] un montículo o montón se define como una secuencia de llaves hi que tienen la siguiente relación de orden:

hi <=h2i y hi<=h2i+1

Para i= 1,2,…,N/2.

Page 13: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Pongamos un ejemplo:

» Ordenar descendente este arreglo:

9, 15, 6, 10, 4, 24, 18, 14, 22

Page 14: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Primero: Hacerlo un montículo.

9, 15, 6, 10, 4, 24, 18, 14, 22

Comparamos la posición 4 con la 8 y 9.10<14 y 10<22 … (V)

Page 15: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

9, 15, 6, 10, 4, 24, 18, 14, 22

Comparamos la posición 3 con la 6 y 7. 6<24 y 6<18 … (V)

Page 16: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

9, 15, 6, 10, 4, 24, 18, 14, 22

Comparamos la posición 2 con la 4 y 5.15<10 y 15<4 … (F)

Se intercambia de posición quedando.9, 4, 6, 10, 15, 24, 18, 14, 22

Page 17: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Puesto que se han hecho modificaciones se comprueba para i>2

9, 4, 6, 10, 15, 24, 18, 14, 22

9, 15, 6, 10, 4, 24, 18, 14, 22

Page 18: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

9, 4, 6, 10, 15, 24, 18, 14, 22

Comparamos la posición 1 con la 2 y 3.9<15 y 9<6 … (F)

Se intercambia de posición quedando.4, 9, 6, 10, 15, 24, 18, 14, 22

Page 19: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Se comprueba para i>1

4, 9, 6, 10, 15, 24, 18, 14, 22

4, 9, 6, 10, 15, 24, 18, 14, 22

4, 9, 6, 10, 15, 24, 18, 14, 22

Page 20: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Ahora se repite esta secuencia pero intercambiando el primer termino por el ultimo y

reduciendo en 1 el numero de términos del arreglo, y construyendo e montón con los n-1

primeros términos.

Page 21: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

4, 9, 6, 10, 15, 24, 18, 14, 22

22, 9, 6, 10, 15, 24, 18, 14, 4

Llama a la función montículo

6, 9, 18, 10, 15, 24, 22, 14, 4

Page 22: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Luego se sigue este proceso intercambiando el primer termino del nuevo montículo, ya no por el ultimo, sino por el penúltimo.

Luego se procede a formar otro nuevo montículo con 1 término menos que el anterior :

(n-1)-1 = n-2

Page 23: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

6, 9, 18, 10, 15, 24, 22, 14, 4

14, 9, 18, 10, 15, 24, 22, 6, 4

Llama a la función montículo

9, 10, 18, 14, 15, 24, 22, 6, 4

Page 24: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

Este proceso se repite sucesivamente hasta llegar hasta que nuestro montículo a construir tenga

n-n=0 términos:

Page 25: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

18, 22, 24, 15, 14, 10, 9, 6, 4

24, 22, 18, 15, 14, 10, 9, 6, 4

Llama a la función montículo

22, 24, 18, 15, 14, 10, 9, 6, 4

Page 26: Ordenamiento shell & heapsort

ORDENAMIENTO HEAPSORT

22, 24, 18, 15, 14, 10, 9, 6, 4

Quedando finalmente el arreglo ordenado ascendentemente:

24, 22, 18, 15, 14, 10, 9, 6, 4