Vous êtes sur la page 1sur 23

UNIVERSIDAD NACIONAL DE

CAJAMARCA

FACULTAD DE INGENIERA
ESCUELA ACADMICO PROFESIONAL DE
INGENIERA DE SISTEMAS

ALGORITMOS DE BSQUEDA Y ORDENAMIENTO

CURSO : ALGORITMOS Y ESTRUCTURA DE DATOS II

DOCENTE : Ing. FIDEL OSWALDO ROMERO ZEGARRA

ALUMNO : CACHI CRUZADO, Heber Gonzalo

CICLO : III

GRUPO : A-I

Cajamarca, Mayo del 2014


ALGORITMOS DE BSQUEDA

La bsqueda de datos implica el determinar si un valor (conocido como la clave de bsqueda)


est presente en los datos y, de ser as, hay que encontrar su ubicacin. Dos algoritmos
populares de bsqueda son la bsqueda lineal simple y la bsqueda binaria, que es ms rpida
pero a la vez ms compleja.
Buscar un nmero telefnico, buscar un sitio Web a travs de un motor de bsqueda y
comprobar la definicin de una palabra en un diccionario son acciones que implican buscar
entre grandes cantidades de datos.
Con mucha frecuencia los programadores trabajan con grandes cantidades de datos
almacenados en arreglos y registros, y por ello ser necesario determinar si un arreglo
contiene un valor que coincida con un cierto valor clave. El proceso de encontrar un elemento
especfico de un arreglo se denomina bsqueda.
En el presente trabajo hablaremos sobre dos algoritmos de bsqueda comunes: uno que es
fcil de programar, pero relativamente ineficiente, y uno que es relativamente eficiente pero
ms complejo y difcil de programar.

1. BSQUEDA SECUENCIAL
La bsqueda secuencial busca un elemento de un arreglo utilizando un valor destino llamado
clave. En una bsqueda secuencial (a veces llamada bsqueda lineal), los elementos de una
lista o vector se exploran (se examinan) en secuencia, uno despus de otro. Busca por cada
elemento de un arreglo en forma secuencial. Si la clave de bsqueda no coincide con un
elemento en el arreglo, el algoritmo evala cada elemento y, cuando se llega al final del
arreglo, informa al usuario que la clave de bsqueda no est presente. Si la clave de bsqueda
se encuentra en el arreglo, el algoritmo evala cada elemento hasta encontrar uno que
coincida con la clave de bsqueda y devuelve el ndice de ese elemento.
La bsqueda secuencial es necesaria, por ejemplo, si se desea encontrar la persona cuyo
nmero de telfono es 958-220000 en un directorio o listado telefnico de una ciudad. Los
directorios de telfonos estn organizados alfabticamente por el nombre del cliente en lugar
de por nmeros de telfono, de modo que deben explorarse todos los nmeros, uno despus
de otro, esperando encontrar el nmero 958-220000.
El algoritmo de bsqueda secuencial compara cada elemento del arreglo con la clave de
bsqueda. Dado que el arreglo no est en un orden prefijado, es probable que el elemento a
buscar pueda ser el primer elemento, el ltimo elemento o cualquier otro. De promedio, al
menos el programa tendr que comparar la clave de bsqueda con la mitad de los elementos
del arreglo. El mtodo de bsqueda lineal funcionar bien con arreglos pequeos o no
ordenados. La eficiencia de la bsqueda secuencial es pobre.
Como ejemplo, considere un arreglo que contiene los siguientes valores:
Posiciones: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
v = { 34 , 56 , 22 , 10 , 77 , 51 , 93 , 30 , 43 , 52}

y un programa que busca el nmero 51. Usando el algoritmo de bsqueda lineal, el programa
primero comprueba si el 34 coincide con la clave de bsqueda. Si no es as, el algoritmo
comprueba si 56 coincide con la clave de bsqueda. El programa contina recorriendo el
arreglo en forma secuencial, y evala el 22, luego el 10, despus el 77. Cuando el programa
evala el nmero 51, que coincide con la clave de bsqueda, devuelve el ndice 5, que es la
posicin del 51 en el arreglo.

Algoritmo de Bsqueda Secuencial:

Figura 1. Algoritmo de Bsqueda secuencial (Mejorado)


Implementacin del algoritmo en java:

Figura 2. Implementacin en java del algoritmo de bsqueda secuencial

Nota: Para la implementacin del algoritmo de bsqueda secuencial se cre un arreglo v


de enteros, con cinco valores de forma desordenada. Tambin se cre un valor clave de
bsqueda para ser ingresado por el teclado.
A diferencia del algoritmo mostrado e la figura 1, en la implementacin de la aplicacin se
utiliz el ciclo for en vez del ciclo while
2. BSQUEDA BINARIA
El algoritmo de bsqueda binaria es ms eficiente que el algoritmo de bsqueda secuencial,
mientras la bsqueda secuencial se aplica a cualquier lista la bsqueda binaria proporciona
una tcnica de bsqueda mejorada pero requiere que el arreglo se ordene.
Una bsqueda binaria tpica es la bsqueda de una palabra en un diccionario. Dada la palabra,
se abre el libro cerca del principio, del centro o del final dependiendo de la primera letra del
primer apellido o de la palabra que busca. Se puede tener suerte y acertar con la pgina
correcta; pero, normalmente, no ser as y se mueve el lector a la pgina anterior o posterior
del libro. Por ejemplo, si la palabra comienza con J y se est en la L se mueve uno hacia
atrs. El proceso contina hasta que se encuentra la pgina buscada o hasta que se descubre
que la palabra no est en la lista. Una idea similar se aplica en la bsqueda en una lista
ordenada. Se sita la lectura en el centro de la lista y se comprueba si la clave coincide con
el valor del elemento central. Si no se encuentra el valor de la clave, se sigue la bsqueda uno
en la mitad inferior o superior del elemento central de la lista. En general, si los datos de la
lista estn ordenados se puede utilizar esa informacin para acortar el tiempo de bsqueda.
Si analizamos el algoritmo veremos que en la primera evala el elemento medio del arreglo.
Si ste coincide con la clave de bsqueda, el algoritmo termina. Suponiendo que el arreglo
se ordene en forma ascendente, entonces si la clave de bsqueda es menor que el elemento
de en medio, no puede coincidir con ningn elemento en la segunda mitad del arreglo, y el
algoritmo contina slo con la primera mitad (es decir, el primer elemento hasta, pero sin
incluir, el elemento de en medio). Si la clave de bsqueda es mayor que el elemento de en
medio, no puede coincidir con ninguno de los elementos de la primera mitad del arreglo, y el
algoritmo contina slo con la segunda mitad del arreglo (es decir, desde el elemento despus
del elemento de en medio, hasta el ltimo elemento). Cada iteracin evala el valor medio
de la porcin restante del arreglo. Si la clave de bsqueda no coincide con el elemento, el
algoritmo elimina la mitad de los elementos restantes. Para terminar, el algoritmo encuentra
un elemento que coincide con la clave de bsqueda o reduce el sub-arreglo hasta un tamao
de cero.
Como ejemplo, considere un arreglo que contiene los siguientes valores:
Posiciones: [0] [1] [2] [3] [4] [5] [6] [7]
v = { 13 , 44 , 75 , 100 , 120 , 275 , 325 , 510 }

Se desea buscar el elemento 225. El punto central de la lista es el elemento v[3] = (100). El
valor que se busca es 225, mayor que 100; por consiguiente, la bsqueda continua en la mitad
superior del conjunto de datos de la lista, es decir, en la sub-lista:
Posiciones: [4] [5] [6] [7]
v = { 120 , 275 , 325 , 510 }
Ahora el elemento mitad de esta sub-lista v[5] = (275). El valor buscado, 225, es menor que
275 y, por consiguiente, la bsqueda continua en la mitad inferior del conjunto de datos de
la lista actual; es decir, en la sub lista de un nico elemento:
Posiciones: [4]
v = { 120 }

El elemento mitad de esta sub lista es el propio elemento v[4] = (120). Al ser 225 mayor
que 120, la bsqueda debe continuar en una sub lista vaca. Se concluye indicando que no
se ha encontrado la clave en la lista.

Algoritmo de Bsqueda Binaria:


Suponiendo que la lista est almacenada como un arreglo, los ndices de la lista son:
bajo = 0 y alto = n-1 y n es el nmero de elementos del arreglo, los pasos a seguir:

1. Calcular el ndice del punto central del arreglo: central = (bajo + alto)/2 (divisin
entera).
2. Comparar el valor de este elemento central con la clave:
Figura 3. Divisin del arreglo

1. Si v[central] < clave, la nueva sub- lista de bsqueda tiene por valores
extremos de su rango bajo = (central+1) y alto.
2. Si clave < v[central], la nueva sub-lista de bsqueda tiene por valores
extremos de su rango bajo y alto = (central-1).

Figura 4. Sub-Arreglos

3. El algoritmo se termina bien porque se ha encontrado la clave o porque el valor


de bajo excede a alto y el algoritmo devuelve el indicador de fallo de 1 (bsqueda
no encontrada).
Figura 5. Algoritmo de bsqueda binaria

Implementacin del algoritmo en java:


Figura 6. Implementacin en java del algoritmo de bsqueda binaria
3. ANLISIS DE LOS ALGORITMOS DE BSQUEDA
Al igual que sucede con las operaciones de ordenacin cuando se realizan operaciones de
bsqueda es preciso considerar la eficiencia (complejidad) de los algoritmos empleados en
la bsqueda. El grado de eficiencia en una bsqueda ser vital cuando se trata de localizar
una informacin en una lista o tabla en memoria, o bien en un archivo de datos.
Complejidad de la bsqueda secuencial
La complejidad de la bsqueda secuencial diferencia entre el comportamiento en el caso peor
y mejor. El mejor caso se encuentra cuando aparece una coincidencia en el primer elemento
de la lista y en ese caso el tiempo de ejecucin es O(1). El caso peor se produce cuando el
elemento no est en la lista o se encuentra al final de la lista. Esto requiere buscar en todos
los n-trminos, lo que implica una complejidad de O(n). El caso medio requiere un poco de
razonamiento probabilista. Para el caso de una lista aleatoria es probable que una
coincidencia ocurra en cualquier posicin. Despus de la ejecucin de un nmero grande de
bsquedas, la posicin media para una coincidencia es el elemento central n/2. El elemento
central ocurre despus de n/2 comparaciones, que define el coste esperado de la bsqueda.
Por esta razn, se dice que la prestacin media de la bsqueda secuencial es O(n).
Anlisis de la bsqueda binaria
El caso mejor se presenta cuando una coincidencia se encuentra en el punto central de la lista.
En este caso la complejidad es O(1) dado que slo se realiza una prueba de comparacin de
igualdad. La complejidad del caso peor es O(log2 n) que se produce cuando el elemento no
est en la lista o el elemento se encuentra en la ltima comparacin. Se puede deducir
intuitivamente esta complejidad. El caso peor se produce cuando se debe continuar la
bsqueda y llegar a una sub-lista de longitud de 1. Cada iteracin que falla debe continuar
disminuyendo la longitud de la sub-lista por un factor de 2. El tamao de las sub-listas es:
n n/2 n/4 n/8 ... 1
La divisin de sub-listas requiere m iteraciones, en cada iteracin el tamao de la sub-lista se
reduce a la mitad. La sucesin de tamaos de las sub-listas hasta una sub-lista de longitud 1:
n n/2 n/2 n/23 n/24 ... n/2m
Siendo: n/2m = 1.
Tomando logaritmos en base 2 en la expresin anterior quedar:
n = 2m
m = log2 n
Por esa razn la complejidad del caso peor es O(log2 n). Cada iteracin requiere una
operacin de comparacin:
Total comparaciones 1 + log2 n
Comparacin de la bsqueda binaria y secuencial
La comparacin en tiempo entre los algoritmos de bsqueda secuencial y binaria se va
haciendo espectacular a medida que crece el tamao de la lista de elementos. Tengamos
presente que en el caso de la bsqueda secuencial, en el peor de los casos, coincidir el
nmero de elementos examinados con el nmero de elementos de la lista tal como representa
su complejidad O(n). Sin embargo, en el caso de la bsqueda binaria, tengamos presente, por
ejemplo, que 210 = 1.024, lo cual implica el examen de 11 posibles elementos; si se aumenta
el nmero de elementos de una lista a 2.048 y teniendo presente que 211 = 2.048 implicar
que el nmero mximo de elementos examinados en la bsqueda binaria es 12. Si se sigue
este planteamiento, se puede encontrar el nmero m ms pequeo para una lista de 1.000.000,
tal que 2n 1.000.000
Es decir, 219 = 524.288, 220 = 1.048.576 y por tanto el nmero de elementos examinados
(en el peor de los casos) es 21. La Figura 5 (tabla de comparacin) muestra la comparacin
de los mtodos de bsqueda secuencial y bsqueda binaria. En la misma tabla se puede
apreciar una comparacin del nmero de elementos que se deben examinar utilizando
bsquedas secuencial y binaria. Esta tabla muestra la eficiencia de la bsqueda binaria
comparada con la bsqueda secuencial y cuyos resultados de tiempo vienen dados por las
funciones de complejidad O(log2 n) y O(n) de las bsquedas binaria y secuencial
respectivamente.

Figura 7. Tabla de comparacin de las bsquedas binaria y secuencial


ALGORITMOS DE ORDENAMIENTO

El ordenamiento de datos (es decir, colocar los datos en cierto orden especfico, como
ascendente o descendente) es una de las aplicaciones computacionales ms importantes. Un
banco ordena todos los cheques por nmero de cuenta, de manera que pueda preparar
instrucciones bancarias individuales al final de cada mes. Las compaas telefnicas ordenan
sus listas de cuentas por apellido paterno y luego por primer nombre, para facilitar el proceso
de buscar nmeros telefnicos. Casi cualquier organizacin debe ordenar datos, y a menudo
cantidades masivas de ellos. El ordenamiento de datos es un problema intrigante, que requiere
un uso intensivo de la computadora, y ha atrado un enorme esfuerzo de investigacin. Un
punto importante a comprender acerca del ordenamiento es que el resultado final (los datos
ordenados) ser el mismo, sin importar qu algoritmo se utilice para ordenar los datos. La
eleccin del algoritmo slo afecta al tiempo de ejecucin y el uso que haga el programa de
la memoria.
Una coleccin de datos (estructura) puede ser almacenada en un archivo, un arreglo (vector
o matriz), un arreglo de registros, una lista enlazada o un rbol. Cuando los datos estn
almacenados en un arreglo, una lista enlazada o un rbol, se denomina ordenacin interna. Si
los datos estn almacenados en un archivo, el proceso de ordenacin se llama ordenacin
externa.
Una lista se dice que est ordenada por la clave k si la lista est en orden ascendente o
descendente con respecto a esta clave. La lista se dice que est en orden ascendente si:
i < j implica que k[i] <= k[j]
y se dice que est en orden descendente si:
i > j implica que k[i] <= k[j]
para todos los elementos de la lista. Por ejemplo, para una gua telefnica, la lista est
clasificada en orden ascendente por el campo clave k, donde k[i] es el nombre del abonado
(apellidos, nombre).
La eficiencia es el factor que mide la calidad y rendimiento de un algoritmo. En el caso de la
operacin de ordenacin, dos criterios se suelen seguir a la hora de decidir qu algoritmo de
entre los que resuelven la ordenacin es el ms eficiente:
1) tiempo menor de ejecucin en computadora;
2) menor nmero de instrucciones.
As, en el caso de ordenar los elementos de un vector, el nmero de comparaciones ser
funcin del nmero de elementos (n) del vector (arreglo). Por consiguiente, se puede expresar
el nmero de comparaciones en trminos de n (por ejemplo, n+4, o bien n2 en lugar de
nmeros enteros (por ejemplo, 325).
Los mtodos de ordenacin se suelen dividir en dos grandes grupos:
Directos: burbuja, seleccin, insercin.
Indirectos: (avanzados) Shell, ordenacin rpida.
En el caso de listas pequeas, los mtodos directos se muestran eficientes, sobre todo porque
los algoritmos son sencillos; su uso es muy frecuente. Sin embargo, en listas grandes estos
mtodos se muestran ineficaces y es preciso recurrir a los mtodos avanzados.

1. ORDENAMIENTO BURBUJA
El mtodo de ordenacin por burbuja es el ms conocido y popular entre estudiantes y
aprendices de programacin, por su facilidad de comprensin y programacin; por el
contrario, es el menos eficiente y por ello, normalmente, se aprende su tcnica pero no suele
utilizarse. La tcnica utilizada se denomina ordenacin por burbuja u ordenacin por
hundimiento debido a que los valores ms pequeos burbujean gradualmente (suben) hacia
la cima o parte superior del arreglo de modo similar a como suben las burbujas en el agua,
mientras que los valores mayores se hunden en la parte inferior del arreglo. La tcnica
consiste en hacer varias pasadas a travs del arreglo. En cada pasada, se comparan parejas
sucesivas de elementos. Si una pareja est en orden creciente (o los valores son idnticos), se
dejan los valores como estn. Si una pareja est en orden decreciente, sus valores se
intercambian en el arreglo.

Algoritmo de Ordenamiento Burbuja:


En el caso de un arreglo (lista) con n elementos, la ordenacin por burbuja requiere
hasta n 1 pasadas. Por cada pasada se comparan elementos adyacentes y se
intercambian sus valores cuando el primer elemento es mayor que el segundo
elemento. Al final de cada pasada, el elemento mayor ha burbujeado hasta la cima
de la sub-lista actual. Por ejemplo, despus que la pasada 0 est completa, la cola de
la lista v [n 1] est ordenada y el frente de la lista permanece desordenado. Las
etapas del algoritmo son:
En la pasada 0 se comparan elementos adyacentes:
1. (v [0],v [1]),( v [1], v [2]),( v [2], v [3]),...( v [n-2], v [n-1])
Se realizan n 1 comparaciones, por cada pareja (v [i], v [i+1]) se
intercambian los valores si v [i+1] < v [i]. Al final de la pasada, el elemento
mayor de la lista est situado en v [n-1].
2. En la pasada 1 se realizan las mismas comparaciones e intercambios,
terminando con el elemento segundo mayor valor en v [n-2].
3. El proceso termina con la pasada n 1, en la que el elemento ms pequeo se
almacena en v [0].
Como ejemplo el siguiente arreglo de 5 posiciones:
Posiciones: [0] [1] [2] [3] [4]
v = { 50 , 20 , 40 , 80 , 30 }

Donde se introduce una variable interruptor para detectar si se ha producido


intercambio en la pasada.

Primera iteracin:

Figura 8. Pasada 0

Segunda iteracin:

Figura 9. Pasada 1
Tercera iteracin:

Figura 10. Pasada 2 (Solo se hacen dos comparaciones)

Cuarta iteracin:

Figura 11. Pasada 3(se hace una nica comparacin de 20 y 30, y no se produce intercambio)

Implementacin del algoritmo en java:


Figura 12. Implementacin en java del algoritmo de ordenamiento burbuja mejorado
2. ORDENAMIENTO POR SELECCIN
Considrese el algoritmo para ordenar un arreglo v de enteros en orden ascendente, es decir,
del nmero ms pequeo al mayor. Es decir, si el arreglo tiene n elementos, se trata de ordenar
los valores del arreglo de modo que el dato contenido en v [0] sea el valor ms pequeo, el
valor almacenado en v [1] el siguiente ms pequeo, y as hasta v [n-1], que ha de contener
el elemento de mayor valor. El algoritmo se apoya en sucesivas pasadas que intercambian el
elemento ms pequeo sucesivamente con el primer elemento de la lista, v [0] en la primera
pasada. En sntesis, se busca el elemento ms pequeo de la lista y se intercambia con v [0],
primer elemento de la lista. v [0] v [1] v [2]... v [n-1]
Despus de terminar esta primera pasada, el frente de la lista est ordenado y el resto de la
lista v [1], v [2]...v [n-1] permanece desordenado. La siguiente pasada busca en esta lista
desordenada y selecciona el elemento ms pequeo, que se almacena entonces en la posicin
v [1]. De este modo los elementos v [0] y v [1] estn ordenados y la sub-lista v [2], v [3]...v
[n-1] desordenada; entonces, se selecciona el elemento ms pequeo y se intercambia con v
[2]. El proceso contina n 1 pasadas y en ese momento la lista desordenada se reduce a un
elemento (el mayor de la lista) y el arreglo completo ha quedado ordenado.
Consideremos un arreglo v con 5 valores enteros:
Posiciones: [0] [1] [2] [3] [4]
v = { 51 , 21 , 39 , 80 , 36 }

Figura 13. Ilustracin del cambio de posiciones del arreglo


Algoritmo de Ordenamiento por Seleccin:
Los pasos del algoritmo son:
1. Seleccionar el elemento ms pequeo de la lista A; intercambiarlo con el
primer elemento v [0]. Ahora la entrada ms pequea est en la primera
posicin del vector.
2. Considerar las posiciones de la lista v [1], v [2], v [3]..., seleccionar el
elemento ms pequeo e intercambiarlo con v [1]. Ahora las dos primeras
entradas de A estn en orden.
3. Continuar este proceso encontrando o seleccionando el elemento ms pequeo
de los restantes elementos de la lista, intercambindolos adecuadamente.

Implementacin del algoritmo en java:

Figura 14. Implementacin en java del algoritmo de ordenamiento por seleccin


3. ORDENAMIENTO POR INSERCIN
El ordenamiento por insercin es otro algoritmo de ordenamiento simple, pero ineficiente.
En la primera iteracin de este algoritmo se toma el segundo elemento en el arreglo y, si es
menor que el primero, se intercambian. En la segunda iteracin se analiza el tercer elemento
y se inserta en la posicin correcta, con respecto a los primeros dos elementos, de manera
que los tres elementos estn ordenados. En la i-sima iteracin de este algoritmo, los primeros
i elementos en el arreglo original estarn ordenados.
As el proceso en el caso de la lista de enteros v = 50, 20, 40, 80, 30.
Posiciones: [0] [1] [2] [3] [4]
v = { 50 , 20 , 40 , 80 , 30 }

Figura 15. Ilustracin del proceso de ordenamiento por insercin

Algoritmo de Ordenamiento por Insercin:


El algoritmo correspondiente a la ordenacin por insercin contempla los siguientes
pasos:
1. El primer elemento v [0] se considera ordenado; es decir, la lista inicial consta
de un elemento.
2. Se inserta v [1] en la posicin correcta, delante o detrs de v [0], dependiendo
de que sea menor o mayor.
3. 3. Por cada bucle o iteracin i (desde i=1 hasta n-1) se explora la sub-lista v
[i-1]...v [0] buscando la posicin correcta de insercin; a la vez se mueve hacia
abajo (a la derecha en la sub-lista) una posicin todos los elementos mayores
que el elemento a insertar v [i], para dejar vaca esa posicin.
4. 4. Insertar el elemento a la posicin correcta.
Implementacin del algoritmo en java:

Figura 16. Implementacin en java del algoritmo de ordenamiento por insercin

4. ORDENAMIENTO SHELL
La ordenacin Shell debe el nombre a su inventor, D. L. Shell. Se suele denominar tambin
ordenacin por insercin con incrementos decrecientes. Se considera que el mtodo Shell es
una mejora de los mtodos de insercin directa.
En el algoritmo de insercin, cada elemento se compara con los elementos contiguos de su
izquierda, uno tras otro. Si el elemento a insertar es el ms pequeo hay que realizar muchas
comparaciones antes de colocarlo en su lugar definitivo.
El algoritmo de Shell modifica los saltos contiguos resultantes de las comparaciones por
saltos de mayor tamao y con ello se consigue que la ordenacin sea ms rpida.
Generalmente se toma como salto inicial n/2 (siendo n el nmero de elementos), luego se
reduce el salto a la mitad en cada repeticin hasta que el salto es de tamao 1.
Consideremos un arreglo v con 7 valores enteros:
Posiciones: [0] [1] [2] [3] [4] [5] [6]
v={6,1,5,2,3,4,0}

El nmero de elementos que tiene la lista es 7, por lo que el salto inicial es 7/2 = 3 (divisin
entera). La siguiente tabla muestra el nmero de recorridos realizados en la lista con los saltos
correspondiente.

Figura 17

Algoritmo de Ordenamiento Shell:


Los pasos a seguir por el algoritmo para una lista de n elementos son:

1. El primer elemento v [0] se considera ordenado; es decir, la lista inicial consta


de un elemento.
Se inserta v [1] en la posicin
2. Dividir la lista original en n/2 grupos de dos, considerando un incremento o
salto entre los elementos de n/2.
3. Clarificar cada grupo por separado, comparando las parejas de elementos, y si
no estn ordenados, se intercambian.

4. Se divide ahora la lista en la mitad de grupos (n/4), con un incremento o salto


entre los elementos tambin mitad (n/4), y nuevamente se clasifica cada grupo
por separado.
5. As sucesivamente, se sigue dividiendo la lista en la mitad de grupos que en
el recorrido anterior con un incremento o salto decreciente en la mitad que el
salto anterior, y luego clasificando cada grupo por separado.
6. El algoritmo termina cuando se consigue que el tamao del salto es 1.
Por consiguiente, los recorridos por la lista estn condicionados por el bucle.

Implementacin del algoritmo en java:

Figura 18. Implementacin en java del algoritmo de ordenamiento shell


5. ORDENAMIENTO QUICKSORT
El algoritmo conocido como quicksort (ordenacin rpida) recibe el nombre de su autor,
Tony Hoare. La idea del algoritmo es simple, se basa en la divisin en particiones de la lista
a ordenar, por lo que se puede considerar que aplica la tcnica divide y vencers. El mtodo
es, posiblemente, el ms pequeo de cdigo, ms rpido, ms elegante, ms interesante y
eficiente de los algoritmos de ordenacin conocidos.
El mtodo se basa en dividir los n elementos de la lista a ordenar en dos partes o particiones
separadas por un elemento: una particin izquierda, un elemento central denominado pivote
o elemento de particin, y una particin derecha. La particin o divisin se hace de tal forma
que todos los elementos de la primera sub-lista (particin izquierda) son menores que todos
los elementos de la segunda sub-lista (particin derecha). Las dos sub-listas se ordenan
entonces independientemente.
Para dividir la lista en particiones (sub-listas) se elige uno de los elementos de la lista y se
utiliza como pivote o elemento de particin. Si se elige una lista cualquiera con los elementos
en orden aleatorio, se puede seleccionar cualquier elemento de la lista como pivote, por
ejemplo, el primer elemento de la lista. Si la lista tiene algn orden parcial conocido, se puede
tomar otra decisin para el pivote. Idealmente, el pivote se debe elegir de modo que se divida
la lista exactamente por la mitad, de acuerdo al tamao relativo de las claves. Por ejemplo, si
se tiene una lista de enteros de 1 a 10, 5 o 6 seran pivotes ideales, mientras que 1 o 10 seran
elecciones pobres de pivotes.
Una vez que el pivote ha sido elegido, se utiliza para ordenar el resto de la lista en dos sub-
listas: una tiene todas las claves menores que el pivote y la otra, todos los elementos (claves)
mayores que o iguales que el pivote (o al revs). Estas dos listas parciales se ordenan
recursivamente utilizando el mismo algoritmo; es decir, se llama sucesivamente al propio
algoritmo quicksort. La lista final ordenada se consigue concatenando la primera sub-lista, el
pivote y la segunda lista, en ese orden, en una nica lista. La primera etapa de quicksort es la
divisin o particionado recursivo de la lista hasta que todas las sub-listas constan de slo
un elemento.

El primer problema a resolver en el diseo del algoritmo de quicksort es seleccionar el pivote.


Aunque la posicin del pivote, en principio, puede ser cualquiera, una de las decisiones ms
ponderadas es aquella que considera el pivote como el elemento central o prximo al central
de la lista. La Figura 19 muestra las operaciones del algoritmo para ordenar la lista v [ ] de n
elementos enteros.
Figura 19. Ilustracin del procedimiento de ordenamiento quicksort
Implementacin del algoritmo en java:
Figura 20. Implementacin en java del algoritmo de ordenamiento quicksort

Figura 21. Implementacin del mtodo recursivo del quicksort


BIBLIOGRAFA

Fundamentos de programacin java ms de 100 algoritmos codificados Primera


edicin Ao 2008. Pginas: 230; 232, 241; 244.
Fundamentos de Programacin: Algoritmos y Diagramas de Flujo Primera
edicin Ao 2004. Pginas: 148; 157.
Programacin en java 5.0 Primera edicin Ao 2006. Pginas: 358; 361, 369;
372.
Como programar en Java Sptima edicin Ao 2008
Algortmica y Programacin para Ingenieros Primera edicin Ao 1993
Algoritmos y Estructura de Datos Edicin desconocida