ORDENAMIENTO BURBUJA ( BUBBLE SORT) COMO ORDENAR

Anuncio
10 de julio
de 2012
CLASE 30/6/2012
ORDENAMIENTO BURBUJA ( BUBBLE SORT)
Ordenación de burbuja (Bubble Sort en inglés) es un sencillo algoritmo de ordenamiento. Es
decir, nos permite colocar los datos en un orden particular, como orden ascendente o
descendente. Funciona revisando cada elemento de la lista que va a ser ordenada con el
siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar
varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la
lista está ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la
lista los elementos durante los intercambios, como si fueran pequeñas "burbujas". También
es conocido como el método del intercambio directo. Dado que solo usa comparaciones para
operar elementos, se lo considera un algoritmo de comparación, siendo el más sencillo de
implementar.
COMO ORDENAR DATOS:
Una manera simple de expresar el ordenamiento de burbuja en pseudocódigo es la siguiente
Este algoritmo realiza el ordenamiento de una lista a de n valores, en este caso de n términos
numerados del 0 al n-1, es decir de n=5 y va a estar enumerado de 0 a 4, consta de dos bucles
(for) anidados uno con el índice i, y un segundo bucle con el índice j, con un recorrido
desde 0 hasta n-1, para cada iteración del primer bucle que indica el lugar de la burbuja. La
burbuja son dos términos de la lista seguidos, j y j+1, que se comparan, si el primero es
menor que el segundo sus valores se intercambian.
Para comprender el funcionamiento, un ejemplo sencillo
Void burbuja (int a[ ], int n){
for (i=1; i<n-1; i++){
for (j=0 ; j<n - 1; j++){
if (a[j] > a[j+1]) /* son dos términos de la lista
seguidos, j y j+1, que se comparan, si el primero es menor que el segundo sus
valores se intercambian*/
intercambio(&a[j],&a[j-1]);
}
}
Void intercambio(int&a,int&b) {
int aux;
aux=a;
a=b;
b=aux;
}
/*El intercambio no se puede ejecutar con solo 2
asignaciones, la variable aux almacena en forma temporal uno de los
valores en intercambio, si se usaran 2 al comparar uno con otro, uno
de ellos se perdería, por ejemplo, si a[i] es 7 y a[i+1]es 5, después
de la primera asignación ambos valores serán 5 y se perdería el 7 .
de ahí la necesidad de la variable aux.
ADRIANA BONJOUR-- VIRGINIA URÍA
Página 1
10 de julio
de 2012
CLASE 30/6/2012
Por ejemplo tenemos una lista de números que hay que ordenar:
a={8,5, -4, 3 , 1}
Podemos ver que la lista tiene cinco términos,:
n=5
El índice i hará un recorrido de 0 hasta n:
Para i←0 hasta n-1 hacer
Que en este caso será de 0 a 4. Para cada uno de los valores de i, j tomara
sucesivamente los valores de 0 hasta n-1(4)
Para j ← 0 hasta n-1 hacer
Para cada valor de j, obtenido en ese orden, se compara el valor del índice j con el
siguiente:
Si a(j) > a(j+1) entonces
Si el termino j es mayor que el término j+1, los valores se permutan, en caso contrario se
continúa con la iteración.
Para el caso del ejemplo, tenemos que n=5
Para la primera iteración del primer bucle:
i= 0
j tomara los valores de 0 hasta 4:
para j ←0 hasta 4 hacer
Cuando j vale 0, se comparan a[0] con a[1] el 8 y el 5, dado que 8 > 5 se permuta el
orden.
Ahora j vale 1 y se comparan a[1] con a[2] el 8 y el -4 Como 8 > -4, se permutan,
Ahora j vale 2 y se comparan a[2] con a[3] el 8 y el 3, Como 8 > 3, se permutan,
Ahora j vale 3 y se comparan a[3] con a[4] el 8 y el 1, Como 8 > 1, se permutan,
dando lugar a una nueva lista.
Se repite el proceso hasta que j valga 4, dando Lugar a una lista parcialmente ordenada,
podemos ver que el termino de mayor valor esta en el último lugar.
Ahora i vale 1, y j hará un recorrido de 0 a 4.
Primero j vale 0, se comparan a[0] con a[1], el 5 y el -4, como 5 > -4 se permutan dando
lugar a la nueva lista.
Para j = 1 se compara el 5 con el 3 y se cambian de orden.
ADRIANA BONJOUR-- VIRGINIA URÍA
Página 2
10 de julio
de 2012
CLASE 30/6/2012
Para j = 2 se compara el 5 y el 1 y se cambian,
Para j = 3 se compara 5 y 8, en este caso no se cambia, finalizando el bucle con una lista
mejor ordenada, puede verse que los dos valores más altos ya ocupan su lugar. No se ha
realizado ninguna comparación con el término cuarto, dado que ya se sabe que después
del primer ciclo es el mayor de la lista.
El algoritmo consiste en comparaciones sucesivas de dos términos consecutivos,
ascendiendo de abajo a arriba en cada iteración, como la ascensión de las burbujas de
aire en el agua, de ahí el nombre del procedimiento, en la primera iteración el recorrido
ha sido completo, en el segundo se ha dejado él último término, al tener ya el mayor de
los valores, en los sucesivos sé ira dejando de realizar las ultimas comparaciones, como
se puede ver. Y así se sigue hasta que quede totalmente ordenado.
Ahora i vale 2 y j recorrerá los valores de 0 a 4.
Cuando j vale 0, se comparan a[0] y a[1]esto es el -4 y el 3 dado que -4 es menor que 3
no se permutan los valores, j pasa a valer 1, con lo que se comparan los términos a[1] y
a[2] el 3 y el 1 que como 3 > 1, se intercambian, para j = 2 comparamos a[2] con a[3] 3 y
5 como 3< 5 quedan en el mismo orden, lo mismo sucede con a[3] con a[4], dando así
lugar a una lista algo más ordenada que la anterior, desde esta nueva ordenación. Este
proceso seguirá así para i=3, y para i=4, ordenándose toda la lista.
Hay que tener en cuenta que el bucle para realiza un número fijo de repeticiones y para
finalizar tendrán que completarse, aun en el caso extremo, de que la lista este
previamente ordenada.
Ventajas:
Fácil implementación.
No requiere memoria adicional.
Desventajas:
Muy lento.
Realiza numerosas comparaciones.
Realiza numerosos intercambios.
Este algoritmo es uno de los más pobres en rendimiento. No es recomendable usarlo.
Veamos el ejemplo más simplificado de nuestra lista viendo cómo cambia el orden durante el
bucle.
8 5 -4 3 1
Tenemos 5 elementos. Es decir, n toma el valor 5. Comenzamos comparando el primero con el
segundo elemento. 8 es mayor que 5, así que intercambiamos. Ahora tenemos:
5 8 -4 3 1
Ahora comparamos el segundo con el tercero: 8 es mayor que -4, así que intercambiamos de
nuevo.
ADRIANA BONJOUR-- VIRGINIA URÍA
Página 3
10 de julio
de 2012
CLASE 30/6/2012
5 -4 8 3 1
Continuamos con el tercero y el cuarto: 8 es mayor que 3. Intercambiamos y obtenemos:
5 -4 3 8 1
Comparamos el cuarto y el quinto: 8 es mayor que 1. Intercambiamos nuevamente:
5 -4 3 1 8
Repitiendo este proceso vamos obteniendo los siguientes resultados:
-4 5 3 1 8
-4 3 5 1 8
-4 3 1 5 8 al comparar el 5 con el 8, como el 5 es menor que 8, no se hace nada, y se continua
comparando.
-4 1 3 5 8
BIBLIOGRAFÍA
Los ejemplos son los dados en clase al igual que algunas explicaciones realizadas
en clase.
-.COMO PROGRAMAR EN C/C++. H.M.DEITEL Y P.J.DEITEL-SEGUNDA EDICION
PRENTICE HALL páginas 223.224.225.
ADRIANA BONJOUR-- VIRGINIA URÍA
Página 4
Descargar