You are on page 1of 119

Prof.

Robert Espinoza

Mtodos de ordenamiento
Introduccin

Ordenar significa reagrupar o reorganizar un conjunto


de datos u objetos en una secuencia especfica.
Formalmente se define de la siguiente manera:
Sea A una lista de elementos
A1, A2, A3, , An
Ordenar es clasificar estos elementos para que queden
segn una distribucin establecida.
Ascendente:
A1 A2 A3 An
Descendente:
A1 A2 A3 An
Introduccin

Ordenacin interna
Los elementos se encuentran en la memoria principal de
la computadora (acceso aleatorio)
Tambin conocida como ordenacin de arreglos.
Ordenacin externa
Los elementos se encuentran almacenados en
dispositivos de almacenamiento secundario (discos,
cintas, etc.)
Tambin se le conoce como ordenacin de archivos.
Ordenamiento Interno
Ordenacin Interna

Mtodos directos (n2)


Implementacin relativamente sencilla.
Fciles de comprender.
Ineficientes cuando n es mediano o grande.
Mtodos logartmicos (n*log n)
Ms complejos y menos intuitivos
Elaboracin ms sofisticada
Difciles de comprender
Son ms eficientes pues requieren de menos
comparaciones y movimientos para clasificar los
elementos.
Ordenacin Interna

En conclusin:
Cuando N es pequeo deben utilizarse mtodos

directos.
Cuando N es mediano o grande deben emplearse
mtodos logartmicos.
Ordenacin por intercambio (Burbuja)

Para un ordenamiento ascendente, podemos


trabajar de dos formas diferentes:
Llevar los elementos menores hacia la parte
izquierda del arreglo, o
Desplazar los elementos mayores hacia la derecha.
En el caso de una clasificacin descendente se
opera de manera contraria.
Llevar los elementos mayores hacia la parte
izquierda del arreglo, o
Desplazar los elementos menores hacia la derecha.
Es quizs el mtodo ms ineficiente.
Ordenacin por intercambio (Burbuja)

Consiste bsicamente en lo siguiente:


Comparar pares de elementos adyacentes e
intercambiarlos entre s hasta que todos se
encuentren ordenados.
Se realizan (n-1) pasadas transportando en cada

una de ellas el mayor o menor elemento, segn


sea el caso a su posicin ideal.
Al final de las (n-1) pasadas los elementos estarn

ordenados
Ordenacin por intercambio (Burbuja)

Ordenacin ascendente llevando el menor a la


izquierda.
Comparamos los elementos adyacentes
comenzando con el penltimo y ltimo elementos.
Intercambiamos si un elemento es mayor que el

siguiente, es decir vamos desplazando el menor a


la izquierda.
Retrocedemos hasta llegar al primer elemento en

la primera pasada, al segundo en la segunda


pasada y as sucesivamente.
Finalmente el arreglo quedar ordenado.
Ordenacin por intercambio (Burbuja)

Ejemplo: Ordenar ascendentemente llevando el menor


a la izquierda

15 67 8 16 44 27 12 35
Ordenacin por intercambio (Burbuja)

Primera pasada

15 67 8 16 44 27 12 35 A[6] > A[7] No intercambio

15 67 8 16 44 27 12 35 A[5] > A[6] Intercambio

15 67 8 16 44 12 27 35 A[4] > A[5] Intercambio

15 67 8 16 12 44 27 35 A[3] > A[4] Intercambio

15 67 8 12 16 44 27 35 A[2] > A[3] No intercambio

15 67 8 12 16 44 27 35 A[1] > A[2] Intercambio

15 8 67 12 16 44 27 35 A[0] > A[1] Intercambio

8 15 67 12 16 44 27 35
Ordenacin por intercambio (Burbuja)

Segunda pasada

8 15 67 12 16 44 27 35 A[6] > A[7] No intercambio

8 15 67 12 16 44 27 35 A[5] > A[6] Intercambio

8 15 67 12 16 27 44 35 A[4] > A[5] No intercambio

8 15 67 12 16 27 44 35 A[3] > A[4] No intercambio

8 15 67 12 16 27 44 35 A[2] > A[3] Intercambio

8 15 12 67 16 27 44 35 A[1] > A[2] Intercambio

8 12 15 67 16 27 44 35
Ordenacin por intercambio (Burbuja)

Tercera pasada

8 12 15 67 16 27 44 35 A[6] > A[7] Intercambio

8 12 15 67 16 27 35 44 A[5] > A[6] No intercambio

8 12 15 67 16 27 35 44 A[4] > A[5] No intercambio

8 12 15 67 16 27 35 44 A[3] > A[4] Intercambio

8 12 15 16 67 27 35 44 A[2] > A[3] No intercambio

8 12 15 16 67 27 35 44
Ordenacin por intercambio (Burbuja)

Cuarta pasada

8 12 15 16 67 27 35 44 A[6] > A[7] No intercambio

8 12 15 16 67 27 35 44 A[5] > A[6] No intercambio

8 12 15 16 67 27 35 44 A[4] > A[5] Intercambio

8 12 15 16 27 67 35 44 A[3] > A[4] No intercambio

8 12 15 16 27 67 35 44
Ordenacin por intercambio (Burbuja)

Quinta pasada

8 12 15 16 27 67 35 44 A[6] > A[7] No intercambio

8 12 15 16 27 67 35 44 A[5] > A[6] Intercambio

8 12 15 16 27 35 67 44 A[4] > A[5] No intercambio

8 12 15 16 27 35 67 44
Ordenacin por intercambio (Burbuja)

Sexta pasada

8 12 15 16 27 35 67 44 A[6] > A[7] Intercambio

8 12 15 16 27 35 44 67 A[5] > A[6] No intercambio

8 12 15 16 27 35 44 67
Ordenacin por intercambio (Burbuja)

Stima pasada

8 12 15 16 27 35 44 67 A[6] > A[7] No intercambio

8 12 15 16 27 35 44 67
Ordenacin por intercambio (Burbuja)

Algoritmo de ordenacin pasando el menor hacia la izquierda

Mtodo Burbuja_menor(A,N)
Para I desde 1 hasta N-1 hacer
Para J desde N-1 hasta I
Si A(J-1) > A(J) entonces
aux A[J-1]
A[J-1] A[J]
A[J] aux
FinSi
FinPara
FinPara
Fin Mtodo
Ordenacin por intercambio (Burbuja)

Ejemplo: Ordenar ascendentemente pasando el mayor


hacia la parte derecha

15 67 8 16 44 27 12 35
Ordenacin por intercambio (Burbuja)

Primera pasada

15 67 8 16 44 27 12 35 A[0] > A[1] No intercambio

15 67 8 16 44 27 12 35 A[1] > A[2] Intercambio

15 8 67 16 44 27 12 35 A[2] > A[3] Intercambio

15 8 16 67 44 27 12 35 A[3] > A[4] Intercambio

15 8 16 44 67 27 12 35 A[4] > A[5] Intercambio

15 8 16 44 27 67 12 35 A[5] > A[6] Intercambio

15 8 16 44 27 12 67 35 A[6] > A[7] Intercambio

15 8 16 44 27 12 35 67
Ordenacin por intercambio (Burbuja)

Segunda pasada

15 8 16 44 27 12 35 67 A[0] > A[1] Intercambio

8 15 16 44 27 12 35 67 A[1] > A[2] No intercambio

8 15 16 44 27 12 35 67 A[2] > A[3] No intercambio

8 15 16 44 27 12 35 67 A[3] > A[4] Intercambio

8 15 16 27 44 12 35 67 A[4] > A[5] Intercambio

8 15 16 27 12 44 35 67 A[5] > A[6] Intercambio

8 15 16 27 12 35 44 67
Ordenacin por intercambio (Burbuja)

Tercera pasada

8 15 16 27 12 35 44 67 A[0] > A[1] No intercambio

8 15 16 27 12 35 44 67 A[1] > A[2] No intercambio

8 15 16 27 12 35 44 67 A[2] > A[3] No intercambio

8 15 16 27 12 35 44 67 A[3] > A[4] Intercambio

8 15 16 12 27 35 44 67 A[4] > A[5] No intercambio

8 15 16 12 27 35 44 67
Ordenacin por intercambio (Burbuja)

Cuarta pasada

8 15 16 12 27 35 44 67 A[0] > A[1] No intercambio

8 15 16 12 27 35 44 67 A[1] > A[2] No intercambio

8 15 16 12 27 35 44 67 A[2] > A[3] Intercambio

8 15 12 16 27 35 44 67 A[3] > A[4] No intercambio

8 15 12 16 27 35 44 67
Ordenacin por intercambio (Burbuja)

Quinta pasada

8 15 12 16 27 35 44 67 A[0] > A[1] No intercambio

8 15 12 16 27 35 44 67 A[1] > A[2] Intercambio

8 12 15 16 27 35 44 67 A[2] > A[3] No intercambio

8 12 15 16 27 35 44 67
Ordenacin por intercambio (Burbuja)

Sexta pasada

8 12 15 16 27 35 44 67 A[0] > A[1] No intercambio

8 12 15 16 27 35 44 67 A[1] > A[2] No intercambio

8 12 15 16 27 35 44 67
Ordenacin por intercambio (Burbuja)

Stima pasada

8 12 15 16 27 35 44 67 A[0] > A[1] No intercambio

8 12 15 16 27 35 44 67
Ordenacin por intercambio (Burbuja)

Algoritmo de ordenacin pasando el mayor hacia la derecha

Mtodo Burbuja_mayor(A,N)
Para I desde N-2 hasta 0 hacer
Para J desde 0 hasta I
Si A(J) > A(J+1) entonces
aux A[J]
A[J] A[J+1]
A[J+1] aux
FinSi
FinPara
FinPara
Fin Mtodo
Anlisis de eficiencia del Mtodo por
intercambio (Burbuja)

Nmero de comparaciones:
Primera pasada: (n-1), segunda pasada: (n-2), tercera
pasada: (n-3) y as sucesivamente hasta llegar a 2 y 1.
Por lo tanto el nmero de comparaciones C es:

n * (n 1)
C (n 1) (n 2) 2 1
2
n2 n
C
2
Anlisis de eficiencia del Mtodo por
intercambio (Burbuja)
El nmero de movimientos o intercambios dependen
de si el arreglo se encuentra:
En orden inverso (caso peor)
Mmx = 3 * (n2 n) / 2 = 1.5 * (n2 n)
Desordenado o aleatorio (caso medio)
Mmed = 0.75 * (n2 n)
Ordenado (caso mejor)
Mmn = 0
El tiempo necesario para ejecutar el algoritmo de la
burbuja es proporcional a n2
T(n) = O(n2)
Anlisis de eficiencia del Mtodo por
intercambio (Burbuja)
Por ejemplo si son 100 elementos a ordenar tenemos
Caso mejor (Ordenado)
4,950 comparaciones

0 movimientos

Caso medio (aleatorio)


4,950 comparaciones

7,425 movimientos

Caso peor (en orden inverso)


4,950 comparaciones

14,850 movimientos
Mtodo de intercambio con seal (flag)

Es una modificacin del mtodo de la burbuja con la


finalidad de terminar la ejecucin del algoritmo en caso
se compruebe que el arreglo ya est ordenado
despus de una pasada.
La idea central es utilizar una seal o marca para
indicar que no se ha producido ningn intercambio en
una pasada, lo que comprueba que el arreglo est
completamente ordenado.
Mtodo de intercambio con seal (flag)
Mtodo Burbuja_seal (A,N)
i 1, flag VERDADERO
Mientras i <= N-1 y flag = VERDADERO hacer
flag FALSO
Para j desde 0 hasta n-i-1 hacer
Si A[ j ] > A[ j+1 ] entonces
aux A[ j ], A[ j ] A [ j+1], A[ j+1] aux
flag VERDADERO
Fin Si
FinPara
ii+1
FinMientras
Fin Mtodo
Ordenacin por Insercin directa

Tambin conocido como Mtodo de la Baraja por ser el


que usan los jugadores de cartas para ordenar la
baraja.
La idea central consiste en insertar un elemento en su
parte izquierda, que ya se encuentra ordenada. Este
proceso se repite desde el segundo hasta el ltimo
elemento.
Ordenacin por Insercin directa

Por ejemplo, ordenar ascendentemente usando el


mtodo de insercin directa

15 67 8 16 44 27 12 35
Ordenacin por Insercin directa

Primera pasada

15 67 8 16 44 27 12 35 A[1] < A[0] No intercambio

15 67 8 16 44 27 12 35
Ordenacin por Insercin directa

Segunda pasada

15 67 8 16 44 27 12 35 A[2] < A[1] Intercambio

15 8 67 16 44 27 12 35 A[1] < A[0] Intercambio

8 15 67 16 44 27 12 35
Ordenacin por Insercin directa

Tercera pasada

8 15 67 16 44 27 12 35 A[3] < A[2] Intercambio

8 15 16 67 44 27 12 35 A[2] < A[1] No Intercambio

8 15 16 67 44 27 12 35
Ordenacin por Insercin directa

Cuarta pasada

8 15 16 67 44 27 12 35 A[4] < A[3] Intercambio

8 15 16 44 67 27 12 35 A[3] < A[2] No Intercambio

8 15 16 44 67 27 12 35
Ordenacin por Insercin directa

Quinta pasada

8 15 16 44 67 27 12 35 A[5] < A[4] Intercambio

8 15 16 44 27 67 12 35 A[4] < A[3] Intercambio

8 15 16 27 44 67 12 35 A[3] < A[2] No Intercambio

8 15 16 27 44 67 12 35
Ordenacin por Insercin directa

Sexta pasada

8 15 16 27 44 67 12 35 A[6] < A[5] Intercambio

8 15 16 27 44 12 67 35 A[5] < A[4] Intercambio

8 15 16 27 12 44 67 35 A[4] < A[3] Intercambio

8 15 16 12 27 44 67 35 A[3] < A[2] Intercambio

8 15 12 16 27 44 67 35 A[2] < A[1] Intercambio

8 12 15 16 27 44 67 35 A[1] < A[0] No intercambio

8 12 15 16 27 44 67 35
Ordenacin por Insercin directa

Stima pasada

8 12 15 16 27 44 67 35 A[7] < A[6] Intercambio

8 12 15 16 27 44 35 67 A[6] < A[5] Intercambio

8 12 15 16 27 35 44 67 A[5] < A[4] No intercambio

8 12 15 16 27 35 44 67
Ordenacin por Insercin directa

Mtodo Insercin (A,N)


Para i desde 1 hasta N-1 hacer
aux A[ i ]
ki-1
Mientras (k >= 0) y (aux < A[ k ]) hacer
A[ k+1 ] A[ k ]
kk-1
FinMientras
A[ k+1 ] aux
FinPara
Fin Mtodo
Anlisis de eficiencia del mtodo de
Insercin directa
El nmero mnimo de comparaciones y movimientos
sucede cuando los elementos ya est ordenados
Nmero de comparaciones
Cmn = n 1
Nmero de movimientos.
Mmn = 0
El nmero mximo de comparaciones y movimientos
entre elementos se da cuando los elementos del
arreglo estn en orden inverso.
Nmero de comparaciones
Cmx = 1 + 2 + + (n-1) = n * (n-1) / 2 = (n2 n) / 2
Nmero de movimientos
Mmx = 1 + 2 + + (n-1) = n * (n-1) / 2 = (n2 n) / 2
Anlisis de eficiencia del mtodo de
Insercin directa
El nmero de comparaciones y movimientos promedio se
da cuando los elementos aparecen aleatoriamente.
Se calcula sumando las comparaciones y movimientos
mximos y mnimos entre 2.
Nmero de comparaciones

( n 2 n)
(n 1) (n 2 n 2)

2
C med
2 4
Nmero de movimientos.

( n 2 n)
0 ( n 2 n)

2
M med
2 4
Anlisis de eficiencia del mtodo de
Insercin directa
Por ejemplo si son 100 elementos a ordenar
tenemos
Caso mejor (Ordenado)
99 comparaciones

0 movimientos

Caso medio (aleatorio)


2,524 comparaciones

2,475 movimientos

Caso peor (en orden inverso)


4,950 comparaciones

4,950 movimientos
Mtodo por Seleccin directa

Es ms eficiente que los anteriores, sin embargo no se


recomienda utilizarlo si el nmero de elementos del
arreglo es mediano o grande.
La idea bsica es buscar el menor elemento y
colocarlo en la primera posicin.
Luego se busca el segundo ms pequeo y se coloca
en la segunda posicin.
Y as sucesivamente hasta que todos los elementos
hayan sido ordenados.
Mtodo por seleccin directa

Por ejemplo ordenar ascendentemente utilizando el


mtodo de seleccin directa

15 67 8 16 44 27 12 35
Mtodo por seleccin directa

Primera pasada
Se haya el menor que es A[2] = 8

Se intercambia con el primero A[0]

Luego el arreglo queda de la siguiente manera:

8 67 15 16 44 27 12 35
Mtodo por seleccin directa

Segunda pasada
Se haya el segundo menor que es A[6] = 12

Se intercambia con el segundo A[1]

Luego el arreglo queda de la siguiente manera:

8 12 15 16 44 27 67 35
Mtodo por seleccin directa

Tercera pasada
Se haya el tercer menor que es A[2] = 15

Se intercambia con el tercero A[2]

Luego el arreglo queda de la siguiente manera:

8 12 15 16 44 27 67 35
Mtodo por seleccin directa

Cuarta pasada
Se haya el cuarto menor que es A[3] = 16

Se intercambia con el cuarto A[3]

Luego el arreglo queda de la siguiente manera:

8 12 15 16 44 27 67 35
Mtodo por seleccin directa

Quinta pasada
Se haya el quinto menor que es A[5] = 27

Se intercambia con el quinto A[4]

Luego el arreglo queda de la siguiente manera:

8 12 15 16 27 44 67 35
Mtodo por seleccin directa

Sexta pasada
Se haya el sexto menor que es A[7] = 35

Se intercambia con el sexto A[5]

Luego el arreglo queda de la siguiente manera:

8 12 15 16 27 35 67 44
Mtodo por seleccin directa

Stima pasada
Se haya el stimo menor que es A[7] = 44

Se intercambia con el stimo A[6]

Luego el arreglo queda de la siguiente manera,

completamente ordenado:

8 12 15 16 27 35 44 67
Mtodo por seleccin directa

Mtodo Seleccin (A,N)


Para i desde 0 hasta N-2 hacer
menor A[ i ], k i
Para j desde i+1 hasta N-1 hacer
Si A[ j ] < menor entonces
menor A[ j ], k j
Fin Si
Fin Para
A[ k ] A[ i ]
A[ i ] menor
Fin Para
Fin Mtodo
Anlisis de eficiencia del Mtodo por
seleccin directa
El nmero de comparaciones es independiente de la
disposicin inicial de los elementos en el arreglo.
En la primera pasada se realizan (n-1) comparaciones
En la segunda (n-2) comparaciones
Y as sucesivamente hasta 2 y 1 comparaciones en la
penltima y ltima pasadas.
Por consiguiente el nmero de comparaciones C es:
n * (n 1)
C (n 1) (n 2) 2 1
2
n2 n
C
2
Anlisis de eficiencia del Mtodo por
seleccin directa
El nmero de movimientos o intercambios siempre
ser:
M n 1
Por ejemplo si son 100 elementos a ordenar
tenemos para los casos mejor, peor y medio:
4950 comparaciones
99 movimientos
Mtodo Shell

El mtodo de Shell es una versin mejorada del


mtodo de insercin directa.
Lo propuso Donald L. Shell en 1959.
Tambin se le conoce como ordenamiento por
disminucin del incremento o insercin con
incrementos decrecientes.
Propone que las comparaciones entre elementos se
efecten con saltos de mayor tamao pero con
incrementos decrecientes para que los elementos
queden ordenados ms rpidamente.
Mtodo Shell

Imaginemos un arreglo de 16 elementos.


Se dividen los elementos en ocho grupos teniendo en
cuenta los elementos a ocho posiciones de distancia
entre s y se ordenan por separado.
Luego se dividen en cuatro grupos, teniendo en cuenta
los elementos que se encuentren a cuatro posiciones
entre s, y se les ordena por separado.
Se dividen en grupos tomando en cuenta los que se
encuentran a dos posiciones entre s y nuevamente se
les ordena por separado.
Finalmente se agrupan y ordenan de manera normal,
de uno en uno.
Mtodo Shell - Ejemplo

Se desea ordenar:
15, 67, 08, 16, 44, 27, 12, 35, 56, 21, 13, 28, 60, 36, 07, 10

1ra. Pasada: 15 67 08 16 44 27 12 35 56 21 13 28 60 36 07 10

15 21 08 16 44 27 07 10 56 67 13 28 60 36 12 35
2ra. Pasada: 15 21 08 16 44 27 07 10 56 67 13 28 60 36 12 35

15 21 07 10 44 27 08 16 56 36 12 28 60 67 13 35
Clasificacin por Shell

3ra.Pasada: 15 21 07 10 44 2708 16 56 36 12 28 60 67 1335

07 10 08 16 12 21 13 27 15 28 44 35 56 36 60 67

4ta.Pasada: 0710 08 16 12 21 13 27 1528 44 35563660 67

07 08 10 12 13 15 16 21 27 28 35 36 44 56 60 67
Mtodo Shell

Mtodo Shell (A, N)


razon N + 1
Mientras (razon > 1) hacer
razon razon div 2, band verdadero
Mientras (band = verdadero) hacer
band falso, i 0
Mientras ( i + razon ) <= N - 1 ) hacer
Si A[ i ] > A [ i + razon] entonces
aux A[i], A[ i ] A[ i+1], A[ i+1] aux
band verdadero
Fin Si
ii+1
Fin Mientras
Fin Mientras
Fin Mientras
Fin Mtodo
Anlisis de la eficiencia del Mtodo Shell

Se han llevado acabo varios estudios de la


Clasificacin por Shell, pero ninguno ha
demostrado que una opcin de los incrementos sea
muy superior al resto.
En 1969 Pratt descubri que el tiempo de ejecucin
del algoritmo es del orden n*(log n)2.
Se han efectuado estudios empricos sumamente
amplios y al parecer, cuando n es grande, el
nmero de movimientos flucta entre n5/4 y 1.6n5/4.
Mtodo QuickSort (Ordenacin rpida)

Este mtodo es el ms eficiente y veloz de los


mtodos de ordenacin interna.
Conocido como mtodo de ordenacin rpida y de
ordenacin por particin.
Este mtodo es una mejora sustancial del mtodo de
intercambio directo.
La idea del algoritmo es la siguiente:
Se toma un elemento X de una posicin cualquiera del
arreglo.
Se trata de ubicar X en la posicin correcta del arreglo,
de tal forma que todos los elementos que se encuentren
a su izquierda sean menores o iguales a X y todos los
que se encuentren a su derecha sean mayores o iguales
a X.
Mtodo QuickSort (Ordenacin rpida)

Se repiten los pasos pero ahora con los conjuntos de


datos que se encuentran a la izquierda y a la derecha de
la posicin correcta de X en el arreglo.
El proceso termina cuando todos los elementos se
encuentran en su posicin correcta en el arreglo.
Mtodo QuickSort (Ordenacin rpida)

Entonces procederemos de la siguiente manera:


Se selecciona un elemento X cualquiera, en nuestro caso
A[0]
Se recorre el arreglo de derecha a izquierda,
comparando si los elementos son mayores o iguales a X
Si un elemento no cumple con esta condicin, se
intercambia con X y se almacena en una variable su
posicin (acotamos el arreglo por la derecha)
Se inicia nuevamente el recorrido pero ahora de
izquierda a derecha, comparando si los elementos son
menores o iguales a X.
Si no cumple la condicin se intercambia con X y se
almacena su posicin (acotamos por la izquierda).
Se repiten los pasos anteriores hasta que X encuentra su
posicin correcta en el arreglo.
Mtodo Quicksort

Por ejemplo ordenaremos ascendentemente:


15, 67, 08, 16, 44, 27, 12, 35
Elegimos X = A[0] = 15
Primera pasada
Recorremos de derecha a izquierda
A[7] >= X (35 >= 15) no hay intercambio
A[6] >= X (12 >= 15 ) s hay intercambio
Queda como sigue:
12, 67, 08, 16, 44, 27, 15, 35
Ahora recorremos de izquierda a derecha
A[1] <= X (67<=15) s hay intercambio
Queda como sigue:
12, 15 , 08, 16, 44, 27, 67, 35
Mtodo Quicksort
Segunda pasada. X = A[1] = 15
12, 15 , 08, 16, 44, 27, 67, 35
Recorremos de derecha a izquierda
A[5] >= X (27>=15) no hay intercambio
A[4] >= X (44 >=15) no hay intercambio
A[3] >= X (16 >=15) no hay intercambio
A[2] >= X (08 >=15) si hay intercambio
Queda como sigue:
12, 08, 15, 16, 44, 27, 67, 35
Como el recorrido de izquierda a derecha se debera
iniciar en la misma posicin donde se encuentra X, el
proceso termina pues X est en la posicin correcta.

12 08 15 16 44 27 35
1er conjunto 2do conjunto
Mtodo Quicksort

Este proceso de particionamiento para localizar la


posicin correcta de un elemento X, se repite cada
vez que queden conjuntos formados por dos o ms
elementos.
El mtodo se puede aplicar de manera iterativa o
recursiva
En la siguiente diapositiva se muestra el
ordenamiento completo.
Mtodo Quicksort

1ra. Pasada 12 08 15 16 44 27 67 35
2da. Pasada 12 08 15 16 44 27 67 35
3ra. Pasada 12 08 15 16 35 27 44 67
4ra. Pasada 12 08 15 16 27 35 44 67
5ta. Pasada 08 12 15 16 27 35 44 67
Mtodo QuickSort Algoritmo recursivo

Mtodo Quicksort (A,N)


ReduceQuicksort (0, N-1)
Fin Mtodo
Mtodo QuickSort Algoritmo recursivo

Mtodo ReduceQuicksort (INI, FIN)


izq INI, der FIN, pos INI, flag verdadero
Mientras (flag = verdadero) hacer
flag falso
Mientras (A[pos] <= A[der] ) y (pos <> der ) hacer
der der -1
Fin Mientras
Si (pos <> der ) entonces
aux A [pos], A[pos] A[der], A[der] aux, pos der
Mientras (A[pos] >= A[izq] ) y (pos <> izq ) hacer
izq izq +1
Fin Mientras
Mtodo QuickSort Algoritmo recursivo

Si (pos <> izq ) entonces


aux A [pos], A[pos] A[izq], A[izq] aux
pos izq, flag verdadero
Fin Si
Fin Si
Fin Mientras
Si (pos - 1 > INI) entonces
ReduceQuicksort (INI, pos - 1)
Fin Si
Si (FIN > pos + 1) entonces
ReduceQuicksort (pos + 1, FIN)
Fin Si
Fin Mtodo
Anlisis de la eficiencia del mtodo
QuickSort

Si se escoge en cada pasada el elemento que ocupa la


posicin central, el nmero de pasadas es del orden de:
log n
Si el tamao del arreglo es una potencia de 2, el nmero
de comparaciones ser:
C = (n-1) * log n
El peor caso ocurre cuando los elementos ya estn
ordenados o se encuentran en orden inverso.
Cmx = n*(n+1)/2 -1

Cmx = (n2 + n)/2 -1


Anlisis de la eficiencia del mtodo
QuickSort

En conclusin
Tiempo promedio de ejecucin
n * log n, O(n * log n)
Tiempo de ejecucin en el peor caso
n2, O( n2 )
Ordenacin por montculo

Tambin conocido como HeapSort


Un montculo se define como:
Para todo nodo del rbol se debe cumplir que su valor
sea mayor o igual que el valor de cualquiera de sus hijos
La idea central de este mtodo se basa en dos
operaciones:
Construir un montculo
Eliminar la raz del montculo en forma repetida
Ordenacin por montculo

Para representar un montculo en un arreglo se debe


tener en cuenta para todo nodo K lo siguiente:
El nodo K se almacena en la posicin K correspondiente
del arreglo
El hijo izquierdo del nodo K se almacena en la posicin
2*K
El hijo derecho del nodo K se almacena en la posicin
2 * K +1
En la siguiente diapositiva se representa un montculo
en un arreglo unidimensional
Ordenacin por montculo

67

36 60

28 21 56 44

27 16 15 08 35

67 36 60 28 21 56 44 27 16 15 08 35
1 2 3 4 5 6 7 8 9 10 11 12
Insercin de un elemento en un Montculo

La insercin en un montculo se lleva a cabo de la siguiente


manera:
Se inserta en la primera posicin disponible.
Se verifica si el valor es mayor que el de su padre.
Si se cumple se efecta el intercambio.
Si no se cumple entonces el algoritmo se detiene y el elemento
queda ubicado en su posicin correcta.
Es un algoritmo recursivo y desde abajo hacia arriba.
Por ejemplo insertaremos los siguientes elementos en un
montculo que esta vaco:
15, 60, 08, 16, 44, 27, 12, 35
Insercin por Montculo

15 60 08 16 44 27 12 35
1 2 3 4 5 6 7 8

Insercin: 15 15 15

Insercin: 60 15 60

60 15
15 60 15
60

60
Insercin: 08 y 16 60
60 16 08 15
16 08
60 15 08 16 15 08

16 15
Insercin por Montculo

Insercin: 44 60 60

16 08 44 08

15 44 15 16

60 16 08 15 44 60 44 08 15 16

Insercin: 27
60
60

44 08
44 27

15 16 27
15 16 08

60 44 08 15 16 27 60 44 27 15 16 08
Insercin por Montculo

Insercin de 12 y 35 60

44 27
60 44 27 15 16 08 12 35
15 16 08 12

60
35

44 27

35 16 08 12

60 44 27 35 16 08 12 15
15
Eliminacin de un Montculo
Se elimina la raz del montculo en forma repetida.
Se reemplaza la raz con el elemento que ocupa la ltima
posicin del montculo.
Verifica que la nueva raz sea menor que el valor ms
grande de sus hijos.
Si se cumple la condicin, entonces se efecta el
intercambio.
Si no se cumple el algoritmo se detiene
Se aplica este algoritmo de manera recursiva y de arriba
hacia abajo.
Ejemplo: Se desea eliminar la raz del montculo presentado
en el arreglo, en forma repetida:
60 44 27 35 16 08 12 15
Eliminacin de un Montculo

Eliminacin de la raz: 60
Intercambiamos la raz 60 con el elemento que ocupa la ltima
posicin del montculo que es 15.
15 44 27 35 16 08 12 60
La nueva raz es: 15 y comparamos:
i. Vector[1] < Mayor(Vector[2], Vector[3]) (15 < 44)
si hay intercambio

44 15 27 35 16 08 12 60

El nuevo valor de la posicin 2 es 15 y comparamos:


i. Vector[2] < Mayor(Vector[4], Vector[5] ) (15 < 35)
s hay intercambio

44 35 27 15 16 08 12 60
Eliminacin de un Montculo

Eliminacin de la raz: 44
Intercambiamos la raz 44 con el elemento que ocupa la ltima
posicin del montculo que es 12

12 35 27 15 16 08 44 60

La nueva raz es 12 y comparamos:


i. Vector[1] < Mayor(Vector[2],Vector[3]) (12 < 35)
si hay intercambio

35 12 27 15 16 08 44 60

El nuevo valor de la posicin 2 es 12 y comparamos:


i. Vector[2] < Mayor(Vector[4],Vector[5]) (12 < 16)
si hay intercambio

35 16 27 15 12 08 44 60
Eliminacin de un Montculo

Eliminacin de la raz 35
Intercambiamos la raz 35 con el elemento que ocupa la ltima
posicin del montculo que es 08.

08 16 27 15 12 35 44 60

La nueva raz es: 08 y comparamos:


i. Vector[1] <Mayor(Vector[2], Vector[3]) (08 < 27)
si hay intercambio

27 16 08 15 12 35 44 60
Eliminacin de un Montculo

Eliminacin de la raz 27
Intercambiamos la raz 27 con el elemento que ocupa la ltima
posicin del montculo que es 12.

12 16 08 15 27 35 44 60

La nueva raz es 12 y comparamos:


i. Vector[1] < Mayor(Vector[2], Vector[3]) (12 < 16)
si hay intercambio

16 12 08 15 27 35 44 60

El nuevo valor de la posicin 2 es: 12 y comparamos:


i. Vector[2] < Vector[4] (12 < 15) si hay intercambio

16 15 08 12 27 35 44 60
Eliminacin de un Montculo

Eliminacin de la raz: 16
Intercambiamos la raz 16 con el elemento que ocupa la ltima
posicin del montculo que es 12.

12 15 08 16 27 35 44 60

La nueva raz es: 12 y comparamos:


i. Vector[1] < Mayor(Vector[2],Vector[3]) (12 < 15)
si hay intercambio

15 12 08 16 27 35 44 60
Eliminacin de un Montculo

Eliminacin de la raz: 15
Intercambiamos la raz 15 con el elemento que ocupa la ltima
posicin del montculo que es 08.

08 12 15 16 27 35 44 60

La nueva raz es: 08 y comparamos:


i. Vector[1] < Vector[2] (08 < 12) si hay intercambio

12 08 15 16 27 35 44 60
Eliminacin de un Montculo

Eliminacin de la raz 12
Intercambiamos la raz 12 con el elemento que ocupa la
ltima posicin del montculo que es 08.

08 12 15 16 27 35 44 60

El nuevo valor de la posicin 1 es: 08 y no podemos


comparar con ms pues el primer hijo del montculo no
existe.
Anlisis de eficiencia del mtodo del
Montculo

El anlisis del mtodo del montculo es complejo.


Debemos tener en cuenta tanto la fase de construccin del
montculo como la fase de eliminacin de su raz.
Este es un mtodo muy rpido para sobre todo para
valores grandes de n.
El tiempo de ejecucin del algoritmo en ambas fases es
O(n * log n)
Tarea

Implementar en java los mtodos de ordenamiento


Shell, Quicksort y comparar su eficiencia.
Disee el algoritmo de ordenamiento por Montculo
(HeapSort) e implemntolo en Java y compare su
eficiencia con los dos anteriores
Ordenamiento Externo (Archivos)
Introduccin

En las organizaciones es muy comn procesar


grandes volmenes de informacin que no es posible
almacenar los datos en la memoria principal, debido a
la caracterstica voltil de sta y su escaso tamao
Por esta razn la informacin se almacena en los
dispositivos de memoria secundaria como son los
discos duros, cintas, etc.
La informacin mayormente se organiza en bases de
datos que contienen tablas o archivos.
Un archivo secuencial es aqul cuyos registros ocupan
posiciones consecutivas.
Todo registro tiene por lo general un campo que lo
identifica de manera nica llamado campo clave.
Introduccin

El proceso de ordenar los datos almacenados en


varios archivos se conoce como fusin o mezcla.
Fusin se entiende como la combinacin o
intercalacin de dos o ms secuencias ordenadas de
registros en una nica secuencia ordenada.
Intercalacin de archivos
Intercalacin de archivos

Es la unin o fusin de dos o ms archivos, ordenados


de acuerdo con un determinado campo clave, en un
slo archivo.
Supongamos que se tienen dos archivos ordenados
ascendentemente por una clave.
La longitud de los archivos puede ser diferente.
Se van comparando las claves de cada archivo y aquel
con menor clave se copia su registro a un tercer
archivo y as hasta finalizar cualquiera de los dos
archivos.
Una vez que se detecte el fin de uno de los archivos,
slo se tendr que copiar el resto de los registros del
otro archivo.
Intercalacin de archivos

Archivo F1 503 573 581 625 670 762

Archivo F2 087 512 677 694

Archivo resultado X
087 503 512 573 581 625 670 677 694 762
Intercalacin de archivos

Por Ejemplo se tiene 2 archivos F1 y F2 ordenados


ascendentemente.
F1: 05 08 20 24 36
F2: 11 17 23 29 55 60 84
Debe producirse un archivo X ordenado con los
elementos de F1 y F2.
Realizamos las siguientes comparaciones
05 < 11 S se cumple
Se copia el reg. correspondiente de F1 en X,
se lee otra clave de F1 (08)
08 < 11 S se cumple
Se copia el reg. correspondiente de F1 en X,
se lee otra clave de F1 (20)
Intercalacin de archivos

20 < 11 No se cumple
Se copia el reg. correspondiente de F2 en X,
se lee otra clave de F2 (17)
El estado de los archivos F1, F2 y X hasta el momento
es:
F1: 05 08 20 24 36
F2: 11 17 23 29 55 60 84
X: 05 08 11
Finalmente X queda como sigue:

X: 05 08 11 17 20 23 24 29 36 55 60 84
Intercalacin de archivos
Mtodo Intercalar(F1, F2, X)
abrir archivo F1
abrir archivo F2
abrir archivo X
a leer archivo F1
b leer archivo F2
// procesa los dos archivos
Mientras (no EOF(F1) y no EOF(F2))
Si (a<b) entonces
almacena a en X
a leer archivo F1
Sino
almacena b en X
b leer archivo F2
Fin Si
Fin Mientras
Intercalacin de archivos
//procesa archivo F1
Mientras (no EOF(F1))
almacena a en X
a leer archivo F1
Fin Mientras

//procesa archivo F2
Mientras (no EOF(F2))
almacena b en X
b leer archivo F2
fin Mientras

cerrar archivos F1, F2, C


Fin Mtodo
Intercalacin de archivos

Cul es la complejidad de tiempo del algoritmo de


intercalacin?

Suponer:
M es el tamao del archivo F1
N es el tamao del archivo F2
Los dos archivos se procesan al mismo tiempo hasta
que uno de los dos llega a su fin M-N o N-M
Despus se procesa el resto del archivo que no ha
terminado, por lo tanto la complejidad es el mayor de M
yN
Ordenacin de archivos
Ordenacin de archivos

La ordenacin de archivos se realiza cuando la


cantidad de datos es demasiado grande y no caben en
la memoria principal.
Se entiende como la clasificacin de los registros de
un archivo ascendentemente o descendentemente, de
acuerdo a un campo clave.
La principal desventaja de esta ordenacin es el
tiempo de ejecucin, debido a las sucesivas
operaciones de entrada y salida.
Los dos mtodos ms importantes son:
Mezcla directa
Mezcla equilibrada.
Ordenacin por Mezcla Directa
Mezcla Directa

Consiste en la realizacin sucesiva de una particin y


una fusin o mezcla que produce secuencias
ordenadas de longitud cada vez mayor.
La idea de este algoritmo consiste:
En la primera pasada la particin es de longitud 1 y la
fusin produce secuencias ordenadas de longitud 2.
En la segunda pasada la particin es de longitud 2 y la
fusin produce secuencias ordenadas de longitud 4
Este proceso se repite hasta que la longitud de la
secuencia para la particin sea:
Parte entera ((n+1)/2)
Donde n es el nmero de registros
Mezcla directa

09 75 14 68 29 17 31 25 04 05 13 18 72 46 61

Particin 09 14 29 31 04 13 72 61

75 68 17 25 05 18 46

Fusin
09 75 14 68 17 29 25 31 04 05 13 18 46 72 61

Particin 09 75 17 29 04 05 46 72

14 68 25 31 13 18 61
Mezcla Directa

Por ejemplo ordenar ascendentemente:


F: 09, 75, 14, 68, 29, 17, 31, 25, 04, 05,
13, 18, 72, 46, 61
Se usan dos archivos auxiliares F1 y F2.
Primera Pasada:
Particin en secuencias de longitud 1
F1: 09 14 29 31 04 13 72 61
F2: 75 68 17 25 05 18 46
Fusin en secuencias de longitud 2.
F: 09 75 14 68 17 29 25 31 04 05 13 18 46 72 61
Mezcla Directa

Segunda Pasada:
Particin en secuencias de longitud 2.
F1: 09 75 17 29 04 05 46 72
F2: 14 68 25 31 13 18 61
Fusin en secuencias de longitud 4.
F: 09 14 68 75 17 25 29 31 04 05 13 18 46 61 72

Tercera Pasada:
Particin en secuencias de longitud 4.
F1: 09 14 68 75 04 05 13 18
F2: 17 25 29 31 46 61 72
Fusin en secuencias de longitud 8.
F: 09 14 17 25 29 31 68 75 04 05 13 18 46 61 72
Mezcla Directa

Cuarta Pasada:
Particin en secuencias de longitud 8.
F1: 09 14 17 25 29 31 68 75
F2: 04 05 13 18 46 61 72
Fusin en secuencias de longitud 16.
F: 04 05 09 13 14 17 18 25 29 31 46 61 68 72 75
Queda finalmente ordenado el archivo.
Ordenacin por Mezcla Equilibrada o
Natural
Mezcla Equilibrada

Es conocido como mezcla natural y optimiza el mtodo


de mezcla directa.
La idea del algoritmo consiste en:
Realizar las particiones tomando secuencias ordenadas
de mxima longitud.
Realizar la fusin de las secuencias ordenadas,
alternativamente sobre dos archivos.
Aplicando estas acciones en forma repetida se lograr que
el archivo original quede ordenado.
Mezcla Equilibrada

F 09 75 14 68 29 17 31 25 04 05 13 18 72 46 61

Particin inicial

F2 09 75 29 25 46 61

F3 14 68 17 31 04 05 13 18 72

Primera fusin-particin

F 09 14 68 75 04 05 13 18 25 46 61 72

F1 17 29 31
Mezcla Equilibrada

Segunda fusin-particin

F2 09 14 17 29 31 68 75

F3 04 05 13 18 25 46 61 72

Tercera fusin-particin

F 04 05 09 13 14 17 18 25 29 31 46 61 68 72 75

F1 Archivo vaco
Mezcla Equilibrada

Se requiere de cuatro archivos, F el archivo original y


F1, F2, F3
Dos de entrada: F2 y F3 y dos de salida F y F1
Termina cuando en la realizacin de una fusin-particin
en el segundo archivo quede vaco.
Por ejemplo se desea ordenar el archivo F. Se usan tres
archivos auxiliares F1, F2 y F3.
F: 09 75 14 68 29 17 31 25 04 05 13 18 72 46 61

Primera Pasada:
Particin inicial
F2: 09 75 29 25 46 61
F3: 14 68 17 31 04 05 13 18 72
Mezcla Equilibrada
Segunda Pasada:
Fusin-Particin en secuencias ordenadas.
F: 09 14 68 75 04 05 13 18 25 46 61 72
F1: 17 29 31
Tercera Pasada:
Fusin-Particin en secuencias ordenadas
F2: 09 14 17 29 31 68 75
F3: 04 05 13 18 25 46 61 72
Cuarta Pasada:
Fusin-Particin en secuencias ordenadas
F : 04 05 09 13 14 17 18 25 29 31 46 61 68 72 75
F1:
Mezcla Equilibrada

F archivo original
F1, F2 y F3 archivos auxiliares para los procesos de particin y
fusin

Mtodo mezclaEquilibrada(F)
particionInicial (F, F2, F3) // particiona el archivo original
en F2 y F3
Hacer
// particion-fusion de F2,F3 en F y F1
particionFusion(F2, F3, F, F1)
// particion-fusion de F,F1 en F2 y F3
particionFusion(F, F1, F2, F3)
Mientras (no EOF(F1) y no EOF(F3))
Fin Mtodo
Tarea

Desarrollar los algoritmos de ordenacin por mezcla


directa y equilibrada e implementarlos en java.

You might also like