Upload
unmsm
View
1.221
Download
8
Embed Size (px)
Citation preview
ORDENAMIENTO SHELL
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
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
Pongamos un ejemplo:
» Se pide ordenar ascendentemente este arreglo
74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30.
n=11
ORDENAMIENTO SHELL
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
30, 14, 21, 44, 38, 74, 11, 78, 65, 88, 97
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
ORDENAMIENTO SHELL
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
ORDENAMIENTO SHELL
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
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
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
ORDENAMIENTO 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.
ORDENAMIENTO HEAPSORT
Pongamos un ejemplo:
» Ordenar descendente este arreglo:
9, 15, 6, 10, 4, 24, 18, 14, 22
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)
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)
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
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
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
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
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.
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
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
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
ORDENAMIENTO HEAPSORT
Este proceso se repite sucesivamente hasta llegar hasta que nuestro montículo a construir tenga
n-n=0 términos:
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
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