Вы находитесь на странице: 1из 57

ALGORITMICA III

Algoritmos de Bsqueda

Docente: Carlos A. Ruiz De La Cruz Melo


Correo: zorroculto69@hotmail.com

INSTRODUCCION
Los algoritmos de bsqueda tienen
como
finalidad
localizar
un
elemento dado dentro de una
estructura de datos o determinar
su inexistencia.
Naturalmente, la bsqueda ser
mucho
ms
eficiente
si
la
estructura de datos (en nuestro
caso el vector) est ordenada.
As,
los
algoritmos
que
estudiaremos
servirn
para
realizar bsquedas en vectores
ordenados.

ALGORITMOS DE
BUSQUEDA
A
lo
largo
de
esta
leccin
estudiaremos
los
siguientes
algoritmos de bsqueda:

Bsqueda secuencial.
Bsqueda
secuencial
con
centinela.
Bsqueda binaria (o dicotmica)
Bsqueda por interpolacin.

Se
presentar
pseudocdigo
y
anlisis de la complejidad para cada
uno de los algoritmos.

BUSQUEDA
SECUENCIAL
El algoritmo de bsqueda ms
sencillo recorre el vector desde el
primer elemento hasta el ltimo y
si encuentra el valor buscado
retorna su posicin o avisa que lo
encontro.
Obviamente, se trata del nico
algoritmo posible si el vector no
est ordenado.
Sin embargo, si el vector est
ordenado resulta muy ineficiente.

BUSQUEDA SECUENCIAL
Funcion busquedaSecuencial(v, n, valor): lgico
entero: i, n
logico: encontro
encontrofalso
para i0 hasta n hacer
si v(i)=valor entonces
encontroverdadero
fin si
finpara
retornar encontro
finbusquedaSecuencial
Como se puede apreciar el algoritmo

realiza siempre el mismo nmero de


iteraciones independientemente de la
posicin en que se encuentre el valor
buscado.
El nmero de iteraciones siempre es
igual al tamao del vector y, puesto que
todas las operaciones del interior del
bucle
tienen
coste
unitario,
la
complejidad del algoritmo de bsqueda

BUSQUEDA SECUENCIAL
CON CENTINELA
El
algoritmo
de
bsqueda
secuencial resulta muy ineficiente
puesto que no se aprovecha del
hecho de que el vector est
ordenado.
Es posible modificarlo para que,
teniendo
en
cuenta
esa
circunstancia, finalice en cuanto
localice el elemento o se determine
que ste no existe.
Esta modificacin se conoce como
bsqueda secuencial con centinela.

Funcion BusSecSentinela(v, n,
valor):logico
i0
mientras v(i)<valor y i<n
hacer
ii+1
finmientras
si v(i)=valor entonces
encontroverdadero
sino
encontrofalso
finsi
finBusSecSentinela

BUSQUEDA SECUENCIAL
CON CENTINELA
La bsqueda secuencial con
centinela no precisa recorrer el
vector por completo.
El caso mejor se produce cuando
el elemento a buscar es el primero
del vector o menor que todos los
elementos del vector. Entonces la
complejidad es O(1).
El caso peor se da cuando el
elemento a buscar es el ltimo del
vector o mayor que todos los
elementos del vector. Entonces la
complejidad es O(n).
Por trmino medio, el algoritmo
emplea
del
orden
de
n/2
iteraciones,
por
lo
cual
la
complejidad del caso medio
tambin sera O(n).

Funcion BusSecSentinela(v, n, valor):logico


i0
mientras v(i)<valor y i<n hacer
ii+1
finmientras
si v(i)=valor entonces
encontroverdadero
sino
encontrofalso
finsi
finBusSecSentinela

BUSQUEDA BINARIA
La idea bsica de la bsqueda
binaria o dicotmica es reducir el
tamao del problema a la mitad en
cada iteracin.
Cuando el tamao del problema,
esto es del vector, sea 1 se puede
resolver la bsqueda de forma
directa.
La estrategia empleada por este
algoritmo es muy similar a la del
juego patata caliente...

BUSQUEDA BINARIA
Funcion BusquedaBinaria(v, valor): entero
posicion-1
encontradofalso
izq1
derMAX
mientras no encontrado y izq der hacer
medio(izq+der)/2
Si v(medio)=valor entonces
posicionmedio
encontradoverdadero
sino
si v(medio)>valor entonces
dermedio-1
sino
izqmedio+1
finsi
finsi
fin mientras
busquedaBinariaposicion
fin funcion

BUSQUEDA BINARIA
En el vector (1,1,2,3,4,5,5,5,6,9) se va a
buscar, de forma binaria, el nmero 7
Observacin
que bastan 4 iteraciones para determinar
que el nmero 7 no se encuentra en el
vector.

BUSQUEDA BINARIA
El algoritmo de bsqueda
binaria divide el tamao
del vector por 2 hasta
quedarse con un vector de
tamao 1.
Al llegar al tamao unitario
se
puede
determinar
directamente
si
el
elemento buscado existe o
no.
As, el algoritmo de
bsqueda binaria realiza
log2(n) iteraciones y, por
tanto, su complejidad es
O(log n).

Funcion BusquedaBinaria(v, valor): entero


posicion-1
encontradofalso
izq1
derMAX
mientras no encontrado y izq der hacer
medio(izq+der)/2
Si v(medio)=valor entonces
posicionmedio
encontradoverdadero
sino
si v(medio)>valor entonces
dermedio-1
sino
izqmedio+1
finsi
finsi
fin mientras
busquedaBinariaposicion
fin funcion

BUSQUEDA POR
INTERPOLACION
Consiste en tratar de acertar en qu
parte del intervalo est la clave que
se esta buscando en lugar de
ciegamente dividir el arreglo a la
mitad. Para ello se utiliza la siguiente
frmula:

(key v[izq ]) * (der izq )


p izq
(v[der ] v[izq ])

BUSQUEDA POR
INTERPOLACION
funcion busquedaInterpolacion (v,valor) :entero
entero: v(max), valor
entero: izq,der, presunto, busqueda
izq1
dermax
mientras ((v[der] valor) y (v[izq] < valor))
pizq+(valor-v[izq])*(der - izq) /(v[der]-v[izq])
si (valor > v[p]) entonces
izqp+1
sino
si (valor < v[p]) entonces
derp-1
sino
izqp
finsi
finsi
finmientras
si (v[izq]=valor) then
busquedaizq
sino
busqueda -1
finsi
retornar busqueda
finBusquedaDeInterpolacion

(key v[izq ]) * (der izq )


p izq
(v[der ] v[izq ])

BUSQUEDA POR INTERPOLACION


La bsqueda por interpolacin utiliza menos
de log log n +1 comparaciones tanto para
una bsqueda con xito como para una
bsqueda infructuosa en archivos con claves
aleatorias.
Depende fuertemente de que las claves estn
bien distribuidas en el intervalo. Esta tcnica
puede ser engaada' una distribucin no
uniforme (lo que es frecuente en la prctica).
Los clculos requeridos no merecen la pena si
n es pequeo (log n log log n ).

CONCLUSIONES DE
BUSQUEDA
La bsqueda es una de las operaciones de
tratamiento de vectores ms habituales.
Una bsqueda en un vector no ordenado
tendra una complejidad O(n); por esa razn es
preferible implementar algoritmos de bsqueda
en vectores ordenados.
Hemos estudiado 4 algoritmos de bsqueda:

Bsqueda secuencial.
Bsqueda secuencial con centinela.
Bsqueda binaria.
Bsqueda por interpolacin.

CONCLUSIONES DE
BUSQUEDA
El primer algoritmo es el ms simple de los cuatro,
recorre completamente el vector y no precisa que el
vector es ordenado; su complejidad es O(n).
El segundo algoritmo recorre el vector hasta que se
encuentra el valor buscado o se determina que ste no
existe. Su complejidad es O(n).
El algoritmo de bsqueda binaria divide en cada iteracin
el vector en dos realizando la bsqueda en una sola de
las mitades. Su complejidad es O(log n).
La bsqueda por interpolacin es una modificacin del
algoritmo de bsqueda binaria, tambin de complejidad
O(log n).

ALGORITMICA III

Algoritmos de Clasificacin

Docente: Carlos A. Ruiz De La Cruz Melo


Correo: zorroculto69@hotmail.com

INTRODUCCIN
Sea A una lista de N elementos:
A1, A2, A3, ..., An
Se busca permutar estos elementos de
tal forma que los mismos queden de
acuerdo con un orden preestablecido.
Ascendente: A1 A2 A3 ... An
Descendente: A1 A2 A3 ... An

INTRODUCCIN
Aunque tanto el tipo y tamao de los
elementos como el dispositivo en donde se
encuentran almacenados pueden influir en
el mtodo que utilicemos para ordenarlos,
en este tema vamos a solucionar el caso en
que los elementos son nmeros enteros y se
encuentran almacenados en un vector.
Si bien existen distintos criterios para
clasificar a los algoritmos de ordenacin,
una posibilidad es atendiendo a su
eficiencia. De esta forma, en funcin de la
complejidad que presentan en el caso
medio, podemos establecer la siguiente
clasificacin:

(n 2):
Burbuja, Insercin, Seleccin.
(nlogn): Mezcla, Quicksort.
Otros:
Shell (n1.25).

CLASIFICACIN POR SELECCIN


Consiste bsicamente en buscar
el menor elemento del arreglo y
colocarlo al inicio.
Luego
buscar
el
segundo
elemento ms pequeo del
arreglo y colocarlo en la segunda
posicin,
Y as hasta ubicar todos los
elementos del arreglo.
La insercin de un elemento
posterior requerir que se
muevan muchos de ellos.

algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion

CLASIFICACIN POR SELECCIN


Deseamos ordenar las siguientes claves de arreglo:
L: 15 67 08 16 44 27 12 35

En cada paso (i=1...n1)


este mtodo busca el
mnimo
elemento
del
subvector a[i..n] y lo
intercambia
con
el
elemento en la posicin i:

CLASIFICACIN POR SELECCIN


En el caso mejor:
n 1

t (n) ( (c1 c 2 (c3 c 4(n i )) c5 c6))


i 1

algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion

CLASIFICACIN POR SELECCIN


En el caso peor
n 1

t (n) ( (c1 c 2 (c3 (c 4 c7)(n i )) c5 c6))


i 1

algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion

c7

CLASIFICACIN POR SELECCIN


En el caso medio

(c 4 c 7)
t (n) ( (c1 c 2 (c3
(n i )) c5 c6))
2
i 1
n 1

algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion

CLASIFICACIN POR SELECCIN


El algoritmo es de complejidad
cuadrtica.
Este mtodo, por el nmero de
operaciones de comparacin e
intercambio que realiza, es el ms
adecuado para ordenar pocos
registros de gran tamao.

algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion

CLASIFICACIN POR SELECCIN


El
nmero de comparaciones es
independiente de la disposicin inicial de
los elementos en el arreglo.
En la primera pasada se hacen (n-1)
comparaciones, en la siguiente (n-2) y as
hasta 1 en la ltima pasada.
El nmero de movimientos siempre ser n1 (salvo que se incorpore al algoritmo una
tcnica para evitar que un elemento se
intercambie consigo mismo).

algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion

C (n 1) (n 2) ... 2 1
n2 n
C
2

n * (n 1)
2

CLASIFICACIN POR INTERCAMBIO


Ejemplo:
Arreglo con elementos: 15 67 08 16 44 27 12 35

CLASIFICACIN POR INTERCAMBIO


Es el mtodo ms ineficiente,
tambin llamado burbuja.
Lleva los elementos pequeos hacia
la parte izquierda del arreglo o
bienLleva los elementos ms grandes
hacia la parte derecha del mismo.
Compara
pares de elementos
adyacentes e intercambiarlos entre s
hasta que todos se encuentren
ordenados.
Por lo tanto en cada pasada se
ordenar un elemento.

algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja

CLASIFICACIN POR INTERCAMBIO


En el caso mejor:

algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja

CLASIFICACIN POR INTERCAMBIO


En el peor caso:

algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja

CLASIFICACIN POR INTERCAMBIO


En el caso medio:

algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja

CLASIFICACIN POR INTERCAMBIO


El algoritmo
cuadrtica.

es

de

complejidad

Este algoritmo funciona de forma


parecida al de Seleccin, pero
haciendo ms trabajo para llevar cada
elemento a su posicin.
De hecho es el peor algoritmo de
clasificacin, no slo en cuanto al
tiempo de ejecucin, sino tambin
respecto al nmero de comparaciones
y de intercambios que realiza.
Una posible mejora que puede admitir
este algoritmo es el control de la
existencia de una pasada sin
intercambios; en ese momento el
vector estar ordenado.

algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja

CLASIFICACIN POR INTERCAMBIO


El numero de comparaciones en el
mtodo burbuja para n elementos es
la siguiente:
En la primera pasada: n-1
comparaciones
En
la
segunda
(n-2)
comparaciones
Hasta llegar a 2 y 1 comparacin

C (n 1) (n 2) ... 2 1
n2 n
C
2

algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja

n * (n 1)
2

CLASIFICACIN POR INSERCIN


Ejemplo:
Arreglo con elementos: 15 67 08 16 44 27 12 35

CLASIFICACIN POR INSERCIN


El mtodo de Insercin realiza
n1 iteraciones sobre el vector,
dejando en la isima etapa (2 i
n) ordenado el subvector
a[1..i].
La forma de hacerlo es
colocando en cada iteracin el
elemento a[i] en su sitio
correcto, aprovechando el hecho
de que el subvector a[1..i1] ya
ha sido previamente ordenado.
Este
mtodo
puede
ser
implementado de forma iterativa
como sigue:

algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion

CLASIFICACIN POR INSERCIN


En el caso mejor el bucle interno no se
realiza nunca, y por tanto:
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion

CLASIFICACIN POR INSERCIN


En el caso peor hay que llevar cada
elemento hasta su posicin final, con lo
que el bucle interno se realiza siempre de
i1 veces. As, en este caso:
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion

CLASIFICACIN POR INSERCIN


En
el
caso
medio,
supondremos equiprobable la
posicin de cada elemento dentro
del vector.
Por tanto para cada valor de i, la
probabilidad de que el elemento
se site en alguna posicin k de
las i primeras ser de 1/i.
El nmero de veces que se
repetir el bucle mientras en este
caso es (ik), con lo cual el
nmero medio de operaciones
que se realizan en el bucle es:

algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion

CLASIFICACIN POR INSERCIN


Para cada valor de i, la
probabilidad de que el elemento se
site en alguna posicin k de las i
primeras ser de 1/i.
El nmero de veces que se
repetir el bucle mientras en este
caso es (ik), con lo cual el
nmero medio de operaciones que
se realizan en el bucle es:

algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion

Por tanto, el tiempo de ejecucin en el caso medio es:

CLASIFICACIN POR INSERCIN


Como podemos ver, en este mtodo los
rdenes de complejidad de los casos peor,
mejor y medio difieren bastante.
As en el mejor caso el orden de
complejidad resulta ser lineal, mientras que
en los casos peor y medio su complejidad
es cuadrtica.
Este mtodo se muestra muy adecuado
para aquellas situaciones en donde
necesitamos ordenar un vector del que ya
conocemos que est casi ordenado, como
suele suceder en aquellas aplicaciones de
insercin de elementos en bancos de datos
previamente ordenados cuya ordenacin
total se realiza peridicamente.

algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion

CLASIFICACIN POR INSERCIN


El
nmero
mnimo
de
comparaciones y movimientos
entre claves sucede cuando los
elementos ya est ordenados.
El
nmero
mximo
de
comparaciones y movimientos
entre elementos se da cuando
los elementos del arreglo estn
en orden inverso.
El nmero de comparaciones
promedio se da cuando los
elementos aparecen en el
arreglo de forma aleatoria.

algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion

CLASIFICACIN POR 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
clasificacin por disminucin del
incremento.
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.

algoritmo SHELL(a, ult)


entero: i,j,h,N
N(ult-prim+1) (* numero de
elementos *)
h1
REPETIR
h3*h+1
HASTA h>N (* construimos la
secuencia *)
REPETIR
hh DIV 3
para ih+1 hasta N hacer
va[i]
ji
mientras (j>h) y (a[j-h+prim1]>v) hacer
a[j+prim-1]a[j-h+prim-1]
jj-1
hh-1
finmientras
a[j+prim-1]v
finpara
HASTA h=1
finSHELL

Observacin:
se sale de REPETIR ..HASTA cuando la condicin es verdadera

CLASIFICACIN POR 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 porciones entre s
y nuevamente se les ordena por separado.
Finalmente se agrupan y ordenan de
manera normal, de uno en uno.

algoritmo SHELL(a, ult)


entero: i,j,h,N
N(ult-prim+1) (* numero de
elementos *)
h1
REPETIR
h3*h+1
HASTA h>N (* construimos la
secuencia *)
REPETIR
hh DIV 3
para ih+1 hasta N hacer
va[i]
j i
mientras (j>h) y (a[j-h+prim1]>v) hacer
a[j+prim-1]a[j-h+prim-1]
jj-1
hh-1
finmientras
a[j+prim-1]v
finpara
HASTA h=1
finSHELL

CLASIFICACIN POR SHELL

Ej: Suponemos que se desea ordenar:


L: 15 67 08 16 44 27 12 35 56 21 13 28 60 36 07 10
1 ra . P a sa d a :

1 5
5

2 1

2 ra . P a sa d a :

1
1 5
5

2 1

1 5
5

0 8

1 5

0
0 7
7

6 7

1 6

2 1

1
1 0
0

0 8
8

1 6

4 4

0 8

1 6

4
4 4
4

4 4

2 7

4 4

2 7

2 7

0 7

2 7

0
0 8
8

1 2

3 5

1 0

0 7

1
1 6

5 6

5 6

1 0

5 6

5
5 6

2 1

6 7

6 7

3
3 6

1 3

1 3

1 3

1 2
2

2 8

6 0

2 8

2 8

6 0

6 0

2 8

3 6

3 6

6
6 0
0

0 7

3 6

1 2

6
6 7
7

1 0

1 2

3 5

3 5

1
1 3

3
3 5
5

CLASIFICACIN POR SHELL

3 r a .. P a s a d a :

0 7
7

1 0
0

0 8
8

4 t a . P a ss a
ada :

0 7

0
0 8
8

1 5

0 7

1 0

2 1
1

1 6

1 0
0

1 2

0 7

1 2

0 8

1
1 3

1 0
0

2 1

1 6

1 5

4 4
4

2 7

1 3

1 2
2

1 6

0 8

2 7

2 1

1 3

2
2 1
1

1 6

1 5

2 7

2 7

5 6

2 8

1 5

2 8

3 6

1 2

4 4

2 8

3 5

2 8

3 5

4 4

3 6

6 0

6 7

5 6

3 5

1 3
3

3 6

5 6

4 4

3 5

6 0

3 6

5 6

6 7

6 0
0

6 0
0

6 7

6 7

CLASIFICACIN POR SHELL


Su complejidad es difcil de calcular y
depende mucho de la secuencia de
incrementos que utilice
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.
En general este mtodo es el escogido
para muchas aplicaciones reales por ser
muy simple teniendo un tiempo de
ejecucin aceptable incluso para grandes
valores de n.

algoritmo SHELL(a, ult)


entero: i,j,h,N
N(ult-prim+1) (* numero de
elementos *)
h1
REPETIR
h3*h+1
HASTA h>N (* construimos la
secuencia *)
REPETIR
hh DIV 3
para ih+1 hasta N hacer
va[i]
j i
mientras (j>h) y (a[j-h+prim1]>v) hacer
a[j+prim-1]a[j-h+prim-1]
jj-1
hh-1
finmientras
a[j+prim-1]v
finpara
HASTA h=1
finSHELL

CLASIFICACIN POR QUICKSORT


Este mtodo es el ms eficiente y veloz de los
mtodos de clasificacin.
Conocido como clasificacin
clasificacin por particin.

rpida

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

CLASIFICACIN POR QUICKSORT


Sea lo que deseamos clasificar. 15 67 08 16 44 27 12 35
Se selecciona L[1] = 15 = X y se compara con los siguientes:
Recorremos de derecha a izquierda
X <= L[8] (15 <= 35)
no hay intercambio
X <= L[7] (15 <= 12)
si hay intercambio
Queda como sigue: 12 67 08 16 44 27 15 35
Recorremos de izquierda a derecha
X >= L[2] (15 >= 67)
si hay intercambio
Queda como sigue: 12 15 08 16 44 27 67 35
Recorrido de Derecha a izquierda
X <= L[6] (15 <= 27)
X <= L[5] (15 <= 44)
X <= L[4] (15 <= 16)
X <= L[3] (15 <= 08)
Queda como sigue: 12 08 15 16

no hay intercambio
no hay intercambio
no hay intercambio
si hay intercambio
44 27 67 35

CLASIFICACIN POR QUICKSORT


Sea lo que deseamos clasificar. 15 67 08 16 44 27 12 35

CLASIFICACIN POR QUICKSORT

En el mejor caso, se escoge el elemento


de la posicin central del conjunto de
datos para analizar.

Respecto al nmero de comparaciones, el


tamao del arreglo es de potencia de 2.
El peor caso ocurre cuando los
elementos ya estn ordenados o los
mismos se encuentran en orden inverso.
Pues al seleccionar el primer elemento se
particionar el arreglo en dos nuevos
conjuntos de 0 y (n-1) elementos.

Anlisis de la Clasificacin por Quicksort

Diversos estudios realizados sobre su comportamiento


demuestran que si se escoge en cada pasada el
elemento que ocupa la posicin central del conjunto de
datos a analizar , el numero de pasadas necesarias
para ordenarlo es del orden logn.

Respecto al numero de comparaciones si el tamao del


arreglo es de potencia de 2 , en la primera pasada ser
(n-1) comparaciones, en la segunda ser (n-1)/2, pero
en dos conjuntos diferentes, en la tercera pasada
realizara (n-1)/4 comparaciones, pero en cuatro
conjuntos diferentes:

C (n 1) 2 *

(n 1)
(n 1)
(n 1)
4*
... (n 1) *
2
4
(n 1)

C (n 1) (n 1) (n 1) ... (n 1)

Anlisis de la Clasificacin por Quicksort


Si el numero de trminos de la sumatoria es igual a m:

C (n 1) * m
Considerando que el numero de trminos de la sumatoria
es igual al numero de pasadas y que este es igual a log n
la expresin queda:

C (n 1) * log n

CLASIFICACIN POR MEZCLA


DIRECTA
Consiste en la realizacin sucesiva de una
particin y una fusin que produce secuencias
ordenadas de longitud 1
Y la fusin o mezcla produce secuencias
ordenadas de longitud 2.
En la segunda pasada la particin es de
longitud 2
Y la fusin o mezcla produce secuencias
ordenadas de longitud 4.
Hasta que la longitud de la secuencia para la
particin sea mayor o igual que el nmero de
elementos del archivo original.

CLASIFICACIN POR MEZCLA


DIRECTA
Ejemplo.
Desea ordenar las claves del arreglo F. Se usan dos
arreglos auxiliares F1 y F2.
F: 09 75 14 68 29 17 31 25 04 05 13 18 72 46
61
Primera Pasada:
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

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

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

Laboratorio
Implementando los siguientes algoritmos de clasificacin en
java o C++, en arreglos:
Seleccin
Insercion
Shell
Quicksort
1.Pruebe todos ellos con la misma entrada (n) y evalu la
diferencia en el numero de comparaciones e intercambios que
realiza para ordenar el conjunto de datos.
2.Pruebe luego para todos ellos con diferentes tamaos de
entrada(n) y aprecie la evolucin del tiempo de ordenacin con
respecto al numero de datos a ordenar. Haga una grafica.

Вам также может понравиться