Vous êtes sur la page 1sur 4

EL ALGORITMO DE LA BURBUJA

Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la


ordenación de los mismos. Se considera ordenar al proceso de reorganizar un conjunto
dado de objetos en una secuencia determinada (patrón de arreglo). El objetivo de este
proceso generalmente es facilitar la búsqueda de uno o más elementos pertenecientes a
un conjunto.

Como ejemplos de conjunto de datos ordenados tenemos:

 Meses del año (ordenados de 1 al 12).


 Listado de estudiantes (ordenados alfabéticamente).

La ordenación, tanto numérica como alfanumérica, sigue las mismas reglas que
empleamos nosotros en la vida normal. Esto es, un dato numérico es mayor que otro
cuando su valor es más grande, y una cadena de caracteres es mayor que otra cuando
esta después por orden alfabético.

El algoritmo de ordenación por el método de la burbuja, también conocido como


intercambio directo, es uno de los más simples que se conocen.

Se basa en una serie de intercambios entre elementos adyacentes. Esos intercambios dan
la impresíón de que cada elemento va ascendiendo a través del array acercándose cada
vez más a su posición final, recordando a cómo ascienden las burbujas de gas en un
líquido.

¡ ejemplo . Suponer que queremos ordenar estos valores con el algoritmo de la burbuja:
45, 52, 21, 37, 49, así pues, n=5

1ª pasada: comparamos cada uno de los cuatro primeros (n-1) con los que le siguen. Si
un elemento no está en orden con respecto al siguiente, los intercambiamos de sitio y
seguimos. El elemento de mayor valor (52) irá "ascendiendo" hasta la última posición.

45, 52, 21, 37, 49 → Comparar 45 y 52. (1º y 2º) Están en orden. Seguimos.
45, 52, 21, 37, 49 → Comparar 52 y 21. (2º y 3º) No están en orden. Intercambio.
45, 21, 52, 37, 49 → seguimos
45, 21, 52, 37, 49 → Comparar 52 y 37 (3º y 4º). No están en orden. Intercambio.
45, 21, 37, 52, 49 → seguimos
45, 21, 37, 52, 49 → Comparar 52 y 49. (4º y 5º). No están en orden. Intercambio.
45, 21, 37, 49, 52 → Ya hemos terminado esta pasada.
45, 21, 37, 49, 52 → El 5º elemento ya está en su sitio.
2ª pasada: comparamos cada uno de los tres primeros (n-2) con los que le siguen. No
llegamos a hacer comparaciones que involucren al 5º elemento, porque la primera
pasada hizo que el mayor de todos los elementos ocupara la última posición, con lo
cual, sabemos que ese ya está en su sitio. Trabajaremos sólo con los cuatro que quedan.

45, 21, 37, 49, 52 → Comparar 1º y 2º. No están en orden. Intercambio.


21, 45, 37, 49, 52 → seguimos
21, 45, 37, 49, 52 → Comparar 2º y 3º. No están en orden. Intercambio.
21, 37, 45, 49, 52 → seguimos
21, 37, 45, 49, 52 → Comparar 3º y 4º. Están en orden. Pasada terminada.
21, 37, 45, 49, 52 → El 4º elemento ya está en su sitio.

3ª pasada: Comparamos cada uno de los dos primeros (n-3) con los siguientes.

21, 37, 45, 49, 52 → 1º y 2º. Están en orden. Seguimos.


21, 37, 45, 49, 52 → 2º y 3º. Están en orden. Pasada terminada.
21, 37, 45, 49, 52 → Ya tenemos tres en orden.

4ª y última pasada: Comparamos el primero con el segundo.

21, 37, 45, 49, 52 → 1º y 2º están en orden. Pasada terminada.


21, 37, 45, 49, 52 → Ya tenemos los cuatro últimos en orden.

21, 37, 45, 49, 52 → Así pues, el primero también lo está.

Expresado en pseudocódigo, podría ser algo como esto:

Pseudocódigo

algoritmo burbuja( A : array de n elementos indizados de 1 a n)


para i desde 1 hasta n-1 hacer: //las n-1 pasadas
para j desde 1 hasta n-i hacer: //el recorrido
si A[j] > A[j+1] entonces //Si no están en orden
intercambiar A[j] y A[j+1] //Se intercambian
fin para
fin para
fin algoritmo

Por supuesto, es necesario adaptarlo a las necesidades concretas. Por ejemplo, en


C/C++/C#/Java, etc... los índices de los arrays empiezan en 0 y terminan en n-1. El
array a ordenar no tiene por qué ser de enteros, puede ser de cualquier cosa ordenable,
pero entonces, análogamente, la operación de comparación (">") debe ser sustituida por
la operación que compare nuestros elementos por el criterio que nosotros queramos.

#include <conio.h>

#define SIZE 7
void main(void) {

int vector[SIZE];

int j, i, temp;

printf("Introduce los %d valores para ordenar:\n", SIZE);

for(i=0; i<SIZE; i++) {

printf("%d: ", i+1);

scanf("%d", &vector[i]);

printf("\n");

/* se aplica el algoritmo de la burbuja */

for(i=0; i<(SIZE-1); i++) {

for (j=i+1; j<SIZE; j++) {

if(vector[j]<vector[i]) {

temp=vector[j];

vector[j]=vector[i];

vector[i]=temp;

}}

printf("El vector ordenado es:\n");

for(i=0; i<SIZE ; i++) {

printf("%d ", vector[i]);

printf("\n");

getch();

Vous aimerez peut-être aussi