Vous êtes sur la page 1sur 126

Mtodos de Ordenamiento y de

Bsqueda Interna
Prof. Robert Espinoza
Mtodos de Ordenamiento
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
A
1
, A
2
, A
3
, , A
n

Ordenar es clasificar estos elementos para que queden
segn una distribucin establecida.
Ascendente:
A
1
A
2
A
3


A
n

Descendente:
A
1
A
2
A
3


A
n





Introduccin
Ordenacin interna
Los elementos se encuentran en la memoria principal de
la computadora.
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.




Introduccin
Ordenacin Interna
Mtodos directos (n
2
)
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)
15 67 8 16 44 27 12 35
Ejemplo: Ordenar ascendentemente llevando el menor
a la izquierda
Ordenacin por intercambio (Burbuja)
15 67 8 16 44 27 12 35
15 67 8 16 44 27 12 35
15 67 8 16 44 12 27 35
15 67 8 16 12 44 27 35
15 67 8 12 16 44 27 35
15 67 8 12 16 44 27 35
15 8 67 12 16 44 27 35
8 15 67 12 16 44 27 35
A[6] > A[7]
A[5] > A[6]
A[4] > A[5]
A[3] > A[4]
A[1] > A[2]
A[2] > A[3]
A[0] > A[1]
No intercambio
Intercambio
Intercambio
Intercambio
Intercambio
Intercambio
No intercambio
Primera pasada
Ordenacin por intercambio (Burbuja)
8 15 67 12 16 44 27 35
8 15 67 12 16 44 27 35
8 15 67 12 16 27 44 35
8 15 67 12 16 27 44 35
8 15 67 12 16 27 44 35
8 15 12 67 16 27 44 35
8 12 15 67 16 27 44 35
A[6] > A[7]
A[5] > A[6]
A[4] > A[5]
A[3] > A[4]
A[1] > A[2]
A[2] > A[3]
No intercambio
Intercambio
No intercambio
No intercambio
Intercambio
Intercambio
Segunda pasada
Ordenacin por intercambio (Burbuja)
8 12 15 67 16 27 44 35
8 12 15 67 16 27 35 44
8 12 15 67 16 27 35 44
8 12 15 67 16 27 35 44
8 12 15 16 67 27 35 44
8 12 15 16 67 27 35 44
A[6] > A[7]
A[5] > A[6]
A[4] > A[5]
A[3] > A[4]
A[2] > A[3]
Intercambio
No intercambio
No intercambio
Intercambio
No intercambio
Tercera pasada
Ordenacin por intercambio (Burbuja)
8 12 15 16 67 27 35 44
8 12 15 16 67 27 35 44
8 12 15 16 67 27 35 44
8 12 15 16 27 67 35 44
8 12 15 16 27 67 35 44
A[6] > A[7]
A[5] > A[6]
A[4] > A[5]
A[3] > A[4]
No intercambio
No intercambio
Intercambio
No intercambio
Cuarta pasada
Ordenacin por intercambio (Burbuja)
8 12 15 16 27 67 35 44
8 12 15 16 27 67 35 44
8 12 15 16 27 35 67 44
8 12 15 16 27 35 67 44
A[6] > A[7]
A[5] > A[6]
A[4] > A[5]
No intercambio
Intercambio
No intercambio
Quinta pasada
Ordenacin por intercambio (Burbuja)
8 12 15 16 27 35 67 44
8 12 15 16 27 35 44 67
8 12 15 16 27 35 44 67
A[6] > A[7]
A[5] > A[6]
Intercambio
No intercambio
Sexta pasada
Ordenacin por intercambio (Burbuja)
8 12 15 16 27 35 44 67
8 12 15 16 27 35 44 67
A[6] > A[7] No intercambio
Stima pasada
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)
15 67 8 16 44 27 12 35
Ejemplo: Ordenar ascendentemente pasando el mayor
hacia la parte derecha
Ordenacin por intercambio (Burbuja)
15 67 8 16 44 27 12 35
15 67 8 16 44 27 12 35
15 8 67 16 44 27 12 35
15 8 16 67 44 27 12 35
15 8 16 44 67 27 12 35
15 8 16 44 27 67 12 35
15 8 16 44 27 12 67 35
15 8 16 44 27 12 35 67
A[0] > A[1]
A[1] > A[2]
A[2] > A[3]
A[3] > A[4]
A[5] > A[6]
A[4] > A[5]
A[6] > A[7]
No intercambio
Intercambio
Intercambio
Intercambio
Intercambio
Intercambio
Intercambio
Primera pasada
Ordenacin por intercambio (Burbuja)
15 8 16 44 27 12 35 67
8 15 16 44 27 12 35 67
8 15 16 44 27 12 35 67
8 15 16 44 27 12 35 67
8 15 16 27 44 12 35 67
8 15 16 27 12 44 35 67
8 15 16 27 12 35 44 67
A[0] > A[1]
A[1] > A[2]
A[2] > A[3]
A[3] > A[4]
A[5] > A[6]
A[4] > A[5]
Intercambio
No intercambio
No intercambio
Intercambio
Intercambio
Intercambio
Segunda pasada
Ordenacin por intercambio (Burbuja)
8 15 16 27 12 35 44 67
8 15 16 27 12 35 44 67
8 15 16 27 12 35 44 67
8 15 16 27 12 35 44 67
8 15 16 12 27 35 44 67
8 15 16 12 27 35 44 67
A[0] > A[1]
A[1] > A[2]
A[2] > A[3]
A[3] > A[4]
A[4] > A[5]
No intercambio
No intercambio
No intercambio
Intercambio
No intercambio
Tercera pasada
Ordenacin por intercambio (Burbuja)
8 15 16 12 27 35 44 67
8 15 16 12 27 35 44 67
8 15 16 12 27 35 44 67
8 15 12 16 27 35 44 67
8 15 12 16 27 35 44 67
A[0] > A[1]
A[1] > A[2]
A[2] > A[3]
A[3] > A[4]
No intercambio
No intercambio
Intercambio
No intercambio
Cuarta pasada
Ordenacin por intercambio (Burbuja)
8 15 12 16 27 35 44 67
8 15 12 16 27 35 44 67
8 12 15 16 27 35 44 67
8 12 15 16 27 35 44 67
A[0] > A[1]
A[1] > A[2]
A[2] > A[3]
No intercambio
Intercambio
No intercambio
Quinta pasada
Ordenacin por intercambio (Burbuja)
8 12 15 16 27 35 44 67
8 12 15 16 27 35 44 67
8 12 15 16 27 35 44 67
A[0] > A[1]
A[1] > A[2]
No intercambio
No intercambio
Sexta pasada
Ordenacin por intercambio (Burbuja)
8 12 15 16 27 35 44 67
8 12 15 16 27 35 44 67
A[0] > A[1]
No intercambio
Stima pasada
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:


2
2
) 1 ( *
1 2 ) 2 ( ) 1 (
2
n n
C
n n
n n C
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)
M
mx
= 3 * (n
2
n) / 2 = 1.5 * (n
2
n)
Desordenado o aleatorio (caso medio)
M
med
= 0.75 * (n
2
n)
Ordenado (caso mejor)
M
mn
= 0
El tiempo necesario para ejecutar el algoritmo de la
burbuja es proporcional a n
2
T(n) = O(n
2
)
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
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-2 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
i i + 1
FinMientras
Fin Mtodo

Mtodo de intercambio con seal (flag)
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
15 67 8 16 44 27 12 35
Por ejemplo, ordenar ascendentemente usando el
mtodo de insercin directa
Ordenacin por Insercin directa
15 67 8 16 44 27 12 35
15 67 8 16 44 27 12 35
A[1] < A[0]
No intercambio
Primera pasada
Ordenacin por Insercin directa
15 67 8 16 44 27 12 35
15 8 67 16 44 27 12 35
8 15 67 16 44 27 12 35
A[2] < A[1]
A[1] < A[0]
Intercambio
Intercambio
Segunda pasada
Ordenacin por Insercin directa
8 15 67 16 44 27 12 35
8 15 16 67 44 27 12 35
8 15 16 67 44 27 12 35
A[3] < A[2]
A[2] < A[1]
Intercambio
No Intercambio
Tercera pasada
Ordenacin por Insercin directa
8 15 16 67 44 27 12 35
8 15 16 44 67 27 12 35
8 15 16 44 67 27 12 35
A[4] < A[3]
A[3] < A[2]
Intercambio
No Intercambio
Cuarta pasada
Ordenacin por Insercin directa
8 15 16 44 67 27 12 35
8 15 16 44 27 67 12 35
8 15 16 27 44 67 12 35
A[5] < A[4]
A[4] < A[3]
Intercambio
Intercambio
Quinta pasada
A[3] < A[2] No Intercambio
8 15 16 27 44 67 12 35
Ordenacin por Insercin directa
8 15 16 27 44 67 12 35
8 15 16 27 44 12 67 35
8 15 16 27 12 44 67 35
A[6] < A[5]
A[5] < A[4]
Intercambio
Intercambio
Sexta pasada
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
8 12 15 16 27 44 67 35
8 12 15 16 27 44 35 67
8 12 15 16 27 35 44 67
A[7] < A[6]
A[6] < A[5]
Intercambio
Intercambio
Stima pasada
A[5] < A[4] No intercambio
8 12 15 16 27 35 44 67
Mtodo Insercin (A,N)
Para i desde 1 hasta N-1 hacer
aux A[ i ]
k i - 1
Mientras (k >= 0) y (aux < A[ k ]) hacer
A[ k+1 ] A[ k ]
k k - 1
FinMientras
A[ k+1 ] aux
FinPara
Fin Mtodo

Ordenacin por Insercin directa
El nmero mnimo de comparaciones y movimientos
sucede cuando los elementos ya est ordenados
Nmero de comparaciones
C
mn
= n 1
Nmero de movimientos.
M
mn
= 0
El nmero mximo de comparaciones y movimientos
entre elementos se da cuando los elementos del
arreglo estn en orden inverso.
Nmero de comparaciones
C
mx
= 1 + 2 + + (n-1) = n * (n-1) / 2 = (n
2
n) / 2
Nmero de movimientos
M
mx
= 1 + 2 + + (n-1) = n * (n-1) / 2 = (n
2
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
Anlisis de eficiencia del mtodo de
Insercin directa
Nmero de movimientos.
4
) 2 (
2
2
) (
) 1 (
2
2
n n
n n
n
C
med
4
) (
2
2
) (
0
2
2
n n
n n
M
med
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
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
Mtodo por seleccin directa
15 67 8 16 44 27 12 35
Por ejemplo ordenar ascendentemente utilizando el
mtodo de 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:
Mtodo por seleccin directa
8 67 15 16 44 27 12 35
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:
Mtodo por seleccin directa
8 12 15 16 44 27 67 35
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:
Mtodo por seleccin directa
8 12 15 16 44 27 67 35
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:
Mtodo por seleccin directa
8 12 15 16 44 27 67 35
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:
Mtodo por seleccin directa
8 12 15 16 27 44 67 35
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:
Mtodo por seleccin directa
8 12 15 16 27 35 67 44
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:
Mtodo por seleccin directa
8 12 15 16 27 35 44 67
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

Mtodo por seleccin directa
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:
2
2
) 1 ( *
1 2 ) 2 ( ) 1 (
2
n n
C
n n
n n C
Anlisis de eficiencia del Mtodo por
seleccin directa
El nmero de movimientos o intercambios siempre
ser:
1 n M
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
15 15 67 67 08 08 16 16 44 44 27 27 12 12 35 35 56 56 21 21 13 13 28 28 60 60 36 36 07 07 10 10 1ra. Pasada: 1ra. Pasada:
15 15 67 67 08 08 16 16 44 44 27 27 12 1235 35 56 56 21 21 13 13 28 2860 60 36 36 07 07 10 10
15 15 67 67 08 08 16 16 44 44 27 27 12 1235 35 56 56 21 21 13 13 28 2860 6036 36 07 07 10 10
2ra. Pasada: 2ra. Pasada:
15 15 67 67 08 08 16 16 44 44 27 27 12 12 35 35 56 56 21 21 13 13 28 2860 60 36 36 07 07 10 10
Clasificacin por Shell
15 15 67 67 08 08 16 16 44 44 27 27 12 12 35 35 56 56 21 21 13 13 28 2860 60 36 36 07 07 10 10
3ra. Pasada: 3ra. Pasada:
15 15 67 67 08 08 16 16 44 44 27 27 12 12 35 3556 56 21 21 13 13 28 28 60 60 36 36 07 0710 10
4ta. Pasada: 4ta. Pasada:
15 15 67 67 08 0816 16 44 44 27 27 12 12 35 3556 56 21 2113 13 28 28 60 60 36 36 07 0710 10
15 15 67 67 08 08 16 16 44 44 27 27 12 12 35 35 56 56 21 21 13 13 28 28 60 60 36 36 07 07 10 10
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
i i + 1
Fin Mientras
Fin Mientras
Fin Mientras
Fin Mtodo
Mtodo Shell
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 n
5/4
y 1.6n
5/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
12 08 16 44 27 67 35
1ra. Pasada
15
08 12 44 27
67 35 2da. Pasada
15 16
15 35 27
44
08 12
3ra. Pasada
16 67
15 16
35 44
08
27
12
4ra. Pasada
67
15 27 16 44 12 35 08
5ta. Pasada
67
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

Mtodo QuickSort Algoritmo recursivo
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.
C
mx
= n*(n+1)/2 -1

C
mx
= (n
2
+ 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
n
2
, O( n
2
)
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
Ordenacin por montculo
67
36
28
21
27 16 15 08
60
56
44
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
Insercin: 15
15 15

60
15
15
60
15

60

60

15

15
60
08
16
16
60
08
15
60

15

08

16

60

16

08

15

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

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

16

08

15

44

60

44

08

15

16

44
60
08
15 16 27
44
60
27
15 16 08
60

44

08

15

16

27

60

44

27

15

16

08

Insercin: 27
Insercin por Montculo
Insercin de 12 y 35
44
60
27
15 16 08
12
35
44
60
27
35 16 08
12
15
60

44

27

15

16

08

12

35

60

44

27

35

16

08

12

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

44

15

27

35

16

08

12

60

44

35

27

15

16

08

12

60

La nueva raz es: 15 y comparamos:
i. Vector[1] < Mayor(Vector[2], Vector[3]) (15 < 44)
si hay intercambio
El nuevo valor de la posicin 2 es 15 y comparamos:
i. Vector[2] < Mayor(Vector[4], Vector[5] ) (15 < 35)
s hay intercambio

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

35

12

27

15

16

08

44

60

35

16

27

15

12

08

44

60

La nueva raz es 12 y comparamos:
i. Vector[1] < Mayor(Vector[2],Vector[3]) (12 < 35)
si hay intercambio

El nuevo valor de la posicin 2 es 12 y comparamos:
i. Vector[2] < Mayor(Vector[4],Vector[5]) (12 < 16)
si hay intercambio

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

27

16

08

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
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

16

12

08

15

27

35

44

60

16

15

08

12

27

35

44

60

La nueva raz es 12 y comparamos:
i. Vector[1] < Mayor(Vector[2], Vector[3]) (12 < 16)
si hay intercambio
El nuevo valor de la posicin 2 es: 12 y comparamos:
i. Vector[2] < Vector[4] (12 < 15) si hay intercambio
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

15

12

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

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

12

08

15

16

27

35

44

60

La nueva raz es: 08 y comparamos:
i. Vector[1] < Vector[2] (08 < 12) si hay intercambio
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)

Mtodos de Bsqueda
Introduccin
La bsqueda es una operacin que nos permite recuperar
informacin previamente almacenada.
El resultado de la operacin es el xito en el caso de
encontrar el elemento buscado y de fracaso en caso
contrario.
Ejemplos:
Directorios de archivos ordenados.
Ofertas laborales ordenados por tipo de trabajo.
Libros de la biblioteca ordenados por autor y tema.
Se puede realizar sobre elementos ordenados sobre
elementos desordenados.
Clasificacin de los mtodos de bsqueda
Se pueden clasificar en:

Bsqueda Interna: Cuando los elementos se encuentran
en memoria principal.

Bsqueda externa: Cuando todos los elementos se
encuentran en memoria secundaria
Mtodos de Bsqueda Interna
Estos pueden ser almacenados en estructuras estticas
como arreglos y estructuras dinmicas como listas
enlazadas y rboles.
Bsqueda Secuencial lineal
Bsqueda Secuencial con Bloques
Bsqueda con ndices.
Bsqueda Binaria.
Bsqueda por transformacin de clave (hash).
rboles Binarios de Bsqueda.
Bsqueda Secuencial
Consiste en revisar elemento tras elemento de la
estructura de datos.
Hasta encontrar el dato buscado o
Hasta llegar al final de la lista de datos disponibles.
Se puede realizar una bsqueda secuencial en:
Un arreglo desordenado.
Un arreglo ordenado
Una Lista enlazada desordenada
Una Lista enlazada ordenada
Bsqueda Secuencial en un arreglo
desordenado
Mtodo busquedaSecuencialDesordenada (A, n, valor)
i0
pos -1
encontrado falso
Mientras (i <= n-1) y (encontrado = falso) hacer
Si (A[i] = valor) entonces
pos i
encontrado verdadero
finSi
i i +1
finMientras
Retornar pos
Anlisis de la eficiencia de la Bsqueda
Secuencial
El nmero de comparaciones es uno de los factores que
se utilizan para determinar los la complejidad de los
mtodos de bsqueda
En cada mtodo debemos evaluar situaciones donde se
presenten el
Caso peor
Caso medio
Caso mejor
Anlisis de la Bsqueda Secuencial en
Arreglo Desordenado
La operacin elemental seleccionada es la
comparacin.
Caso Mejor: El elemento buscado est en la
primera posicin.
C
mn
= 1

Caso Peor: El elemento buscado no se encuentra
en el arreglo o est al final.
C
mx
= n
Caso Medio: El elemento buscado se encuentra en
una posicin i en el arreglo.
C
medio
= (n + 1) / 2
Anlisis de la Bsqueda Secuencial en
Arreglo Desordenado (Caso Medio)
Misma probabilidad de la distribucin de los datos.
Misma probabilidad de encontrar al elemento buscado en
cualquier posicin del arreglo.
El nmero de comparaciones puede ser 1, 2, 3, ..., n y en
cada paso debe darse una probabilidad de 1/n
2
1 1
2
1
1
... 3 2 1
1
...
1
3
1
2
1
1
n
n
n n
C
n
n C
n
n
n n n
C
medio
medio
medio
Bsqueda Secuencial en un arreglo
ordenado
Mtodo busquedaSecuencialOrdenada (A, n, valor)
i0
pos -1
encontrado falso
Mientras (i <= n-1) y (encontrado = falso) y (A[i]<= valor) hacer
Si (A[i] = valor) entonces
pos i
encontrado verdadero
finSi
i i +1
finMientras
Retornar pos
Fin
Bsqueda Secuencial usando Bloques
El vector debe estar ordenado para este mtodo.
Trabajar con bloque de elementos en vez de
elementos aislados.
El tamao del bloque de elementos depende del
nmero de elementos del vector. Mayormente se
considera el tamao igual a:


n
Bsqueda Secuencial usando Bloques
La bsqueda se realiza comparando la clave con el
ltimo elemento de cada bloque.
Si la clave resulta menor, se busca secuencialmente
en los elementos salteados del bloque.
Si la clave es mayor se contina con el siguiente
bloque.

Anlisis de la Bsqueda Secuencial
usando Bloques
La operacin elemental seleccionada es la comparacin.
Caso Mejor: El elemento buscado se encuentre en el
ltimo elemento del primer bloque.
Caso Mejor = 1
Caso Peor: El elemento buscado se encuentre en la
penltima posicin del ltimo bloque y donde todos los
bloque sean del mismo tamao.
En el caso de que el ltimo bloque no sea del mismo
tamao que el resto, estara dado por el penltimo
elemento del penltimo bloque.
Caso Peor = N/(N)
1/2
+((N)
1/2
-1) = 2N/(N)
1/2
1
Anlisis de la Bsqueda Secuencial
usando Bloques
Caso Medio: El elemento buscado se encuentra en
una posicin i en el arreglo.
Caso Medio = [ 2N/(N)
1/2
1 + 1 ]/2 = 2N/(N)
1/2


Bsqueda Binaria
Se efecta sobre arreglos ms no sobre listas.
Los datos previamente deben estar ordenados.
Consiste en comparar el valor buscado con el
elemento medio y discriminar si se encuentra en
medio, la mitad superior la mitad inferior.
Para luego proseguir con esta misma tctica en el
bloque definido anteriormente.


Mtodo busquedaBinariaIterativa (A, n, valor )
inicio 0, fin n-1
pos -1, encontrado falso
Mientras (inicio <= fin) y (encontrado = falso) hacer
medio (inicio + fin) div 2
Si (valor = A[medio])
pos medio
encontrado verdadero
Sino
Si (valor < A[medio]) entonces
fin medio 1
Sino
inicio medio + 1
Fin Si
Fin Si
Fin Mientras
Bsqueda Binaria Iterativa
Retornar pos
Fin Mientras
Bsqueda Binaria Iterativa
Mtodo busquedaBinariaRecursiva (A, inicio, fin, valor )
Si (inicio > fin) entonces
retornar -1
Sino
medio (inicio + fin) div 2
Si (valor = A[medio])
retornar medio
Sino
Si (valor < A[medio]) entonces
busquedaBinariaRecursiva(A, inicio, medio 1, valor)
Sino
busquedaBinariaRecursiva(A, medio + 1, fin, valor)
Fin si
Fin si
Fin si
Fin Mtodo


Bsqueda Binaria Recursiva
Anlisis de la Bsqueda Binaria
La operacin elemental seleccionada es la
comparacin.
Caso Mejor: El elemento buscado est en la posicin
del medio de la lista.
C
mn
= 1
Caso Peor: El elemento buscado no se encuentra en
el arreglo.
El problema consiste en que no se sabe a priori cuantas
comparaciones van a realizarse.
Habr tantas comparaciones como elementos medios
haya.
C
mx
= log
2
(N)
Anlisis de la Bsqueda Binaria
Caso medio: El elemento buscado se encuentra en
una posicin aleatoria.
2
) ( log 1
2
N
C
medio
Bsqueda Indexada
Necesita que los elementos
sobre los que se realiza la
bsqueda estn ordenados de
acuerdo a una determinada
clave.
El mtodo utiliza un arreglo
auxiliar denominado arreglo
ndice.
Cada objeto en el arreglo ndice
consta de un valor y la posicin
que ocupa dicho valor en el
correspondiente arreglo
ordenado

Bsqueda Indexada
Mediante cada elemento del arreglo ndice se asocian
grupos de elementos del arreglo inicial. Los elementos
en el ndice y en el arreglo deben estar ordenados.
El mtodo consta de dos pasos:
Buscar en el arreglo ndice el intervalo correspondiente
al elemento buscado.
Restringir la bsqueda a los elementos del intervalo que
se localiz previamente.
Bsqueda Indexada
La ventaja del mtodo estriba en que la bsqueda se
realiza inicialmente en el arreglo de ndices,
cuantitativamente ms pequea que el arreglo de
elementos.
Cuando se ha encontrado el intervalo correcto, se
hace una segunda bsqueda en una parte reducida
del arreglo.
Estas dos bsquedas pueden ser secuenciales o
binarias y el tiempo de ejecucin depender del tipo
de bsqueda utilizado en cada uno de los arreglos

Bsqueda Indexada - Ejemplo
Se decide dividir el arreglo inicial en bloques de tres
elementos (k=3)
El arreglo ndice estar formado por n/k + 1
elementos, por no ser el ltimo bloque de igual
tamao, es decir, 11/3 +1= 4
Bsqueda Indexada - Ejemplo
Realiza la bsqueda en el arreglo de ndices. Finaliza cuando
ha encontrado el elemento o est en la posicin que contiene al
elemento mayor de los ms pequeos al elemento buscado
Si valor = 10, en el arreglo de ndice indicar la posicin 2. Por lo
tanto, la bsqueda en el arreglo inicial comenzar en la posicin
6 hasta el final del bloque.
Bsqueda Indexada Creacin del Arreglo
ndice
Clase elementoIndice
clave: entero
posicion: entero
Fin Clase
Bsqueda Indexada Creacin del Arreglo
ndice
Mtodo crearArregloIndice(A, n, Indice: elementoIndice)
k entero(raizCuadrada(n))
Si (n mod k = 0) entonces
m n div k
Sino
m n div k + 1
fin Si
cont 0
Para i 0 hasta m 1 hacer
Indice [i].clave A[cont]
Indice[i].posicion cont
cont cont + k
fin Para
Fin Mtodo
Bsqueda Indexada Bsqueda binaria
de clave en el ndice
Mtodo busquedaBinariaIndice(Indice: elementoIndice , m, valor)
inicio 0
fin m - 1
Mientras (inicio <= fin) hacer
medio (inicio + fin) div 2
Si (valor = Indice[medio].clave)
Retorna Indice[medio].posicion
Sino
Si (valor < Indice[medio].clave) entonces
fin medio -1
Sino
inicio medio + 1
fin Si
fin Si
fin Mientras
Bsqueda Indexada Bsqueda binaria
de clave en el ndice
//Caso especial el elemento buscado es ms pequeo que el primer
elemento
Si (fin = -1) entonces
Retorna -1
Sino
Retorna Indice[fin].posicion
fin Si
Fin Mtodo
Bsqueda Indexada Bsqueda binaria
de clave en el arreglo inicial
Mtodo busquedaBinaria (A, n, Indice: elementoIndice, m, k, valor)
inicio busquedaBinariaIndice(Indice, m, valor)
Si (inicio -1) entonces
fin inicio + k - 1
Si (fin >= n) entonces
fin = n 1
fin Si
Mientras (inicio <= fin) hacer
medio (inicio + fin) div 2
Si (valor = A[medio]) entonces
Retornar medio
Si no
Si (valor < A[medio]) entonces
fin medio - 1
Sino
inicio medio + 1
fin Si
fin Si
fin Mientras
fin Si
Retornar -1
fin Mtodo
rboles Binario de Bsqueda
Un rbol binario de bsqueda es aquel donde un nodo
cualquiera debe cumplir:
Es menor que los valores del subrbol derecho
Es mayor o igual que los valores del subrbol
izquierdo.
Esta estructura permite buscar valores en forma ms
eficiente.
3
5
2
1 4 6
Bsqueda de rboles Binarios de
Bsqueda
El proceso consiste en buscar el
VALOR.
1. Si VALOR < N hijo izquierdo
de N
2. Si VALOR > N hijo derecho
de N
3. Repetir el paso (1) y (2) hasta
que las siguientes condiciones:
Si VALOR = N puntero al
nodo encontrado.
Si hay un subrbol vaci La
bsqueda ha sido infructuosa
38
14
56
8 23
82
19
70
45
Insercin de rboles Binarios de
Bsqueda
El proceso consiste en insertar el
VALOR.
1. Si VALOR < N el hijo izquierdo
de N.
2. Si VALOR > N el hijo derecho de
N.
3. Repetir el paso (1) , (2) hasta que
las siguientes condiciones:
Si hay un subrbol vaci Se
inserta en el subrbol vaco.
Si VALOR = N no se inserta
38
14
56
8 23
82
19
70
45
Eliminacin de rboles Binarios de
Bsqueda
El proceso consiste es eliminar el
VALOR.
Caso 1: N no tiene hijos N se
elimina y se remplaza el puntero del
padre a N por el puntero nulo.
Caso2: N tiene un hijo N se
elimina y es reemplazando el puntero
a N del Padre por puntero al hijo nico
de N
Caso 3: N tiene dos hijos, N se
elimina y es remplazado por el nodo
que est ms a la derecha en el
subrbol izquierdo.
38
14
56
8 23
82
19
70
45
Anlisis de operaciones en rboles
Binarios de Bsqueda
Muchos nodos pueden tener un solo hijo y as sus
ramas se vuelven largas y delgadas, con esto se
vuelve ineficiente. En el peor caso todos los nodos
pueden tener un solo hijo.
Buscar un valor en el significa comparar
prcticamente con los n nodos del rbol.
Existen mtodos para equilibrar el rbol y que las
operaciones de bsqueda, adicin, borrado
requieran un tiempo que este en O(Log n) en el caso
peor

Vous aimerez peut-être aussi