Está en la página 1de 21

ORDENACIÓN POR EL MÉTODO DE

LA BURBUJA
Este método consiste en acomodar el
vector moviendo el mayor hasta la última
casilla comenzando desde la casilla cero
del vector hasta haber acomodado el
número más grande el la última posición,
una vez acomodado el más grande,
prosigue a encontrar y acomodar el
siguiente más grande comparando de
nuevo los numeros desde el inicio del
vector, y así sigue hasta ordenar todo los
elementos el arreglo. Este algoritmo es
muy deficiente ya que al ir comparando
las casillas para buscar el siguiente más
grande, éste vuelve a comparar las ya
ordenadas. A pesar de ser el algoritmo
de ordenamiento más deficiente que hay,
éste es el más usado en todos los
lenguajes de programación.
Entonces:
Dado un vector a1, a2, a3, ... an
1) Comparar a1 con a2 e
intercambiarlos si a1>a2 (o a1<a2)
2) Seguir hasta que todo se haya comparado an-1 con an

3) Repetir el proceso anterior n-1 veces</a

Algoritmo: Complejidad
2
for(i=0; i < n-1; i++){ T(n )
for(j=0; j < n-1; j++){ T(n)
if(vec[j] > vec[j+1]){ T(1)
aux=vec[j]; T(1)

vec[j]=vec[j+1]; T(1)

vec[j+1]=aux;} T(1)

El procedimiento de la burbuja es el siguiente:

Ir comparando desde la casilla 0 numero tras número hasta

encontrar uno mayor, si este es realmente el mayor de

todo el vector se llevará hasta la última casilla, si no es así,

será reemplazado por uno mayor que él.


Este procedimiento seguirá así hasta que halla ordenado

todas las casillas del vector.

Una de las deficiencias del algoritmo es que ya cuando a

ordenado parte del vector vuelve a compararlo cuando esto

ya no es necesario.

Ejemplo:

Vector
Variables
pos 0 1 2 3 4 5 6 7
a[j a[j+ 4 5 1 4 9 1 6
ij inicio 6
] 1] 4 5 2 2 4 8 7
4 1 5 4 9 1 6
0 1 55 12 cambio 6
4 2 5 2 4 8 7
4 1 4 5 9 1 6
0 2 55 42 cambio 6
4 2 2 5 4 8 7
4 1 4 5 1 9 6
0 4 94 18 cambio 6
4 2 2 5 8 4 7
4 1 4 5 1 9 6
0 5 94 6 cambio 6
4 2 2 5 8 4 7
4 1 4 5 1 6 9
0 6 94 67 cambio 6
4 2 2 5 8 7 4
1 4 4 5 1 6 9
1 0 44 12 cambio 6
2 4 2 5 8 7 4
1 4 4 5 1 6 9
1 1 44 42 cambio 6
2 2 4 5 8 7 4
4 4 1 5 6 9
1 3 55 18 cambio 2 6
2 4 8 5 7 4
1 4 4 1 5 6 9
1 4 55 6 cambio 6
2 2 4 8 5 7 4
1 4 1 4 5 6 9
2 2 44 18 cambio 6
2 2 8 4 5 7 4
1 4 1 4 5 6 9
2 3 44 6 cambio 6
2 2 8 4 5 7 4
1 1 4 4 5 6 9
3 1 42 18 cambio 6
2 8 2 4 5 7 4
1 1 4 4 5 6 9
3 2 42 6 cambio 6
2 8 2 4 5 7 4
4 1 18 6 cambio 1 6 1 4 4 5 6 9
2 8 2 4 5 7 4
ordena 1 1 4 4 5 6 9
5 0 12 6 6
do 2 8 2 4 5 7 4
ORDENAMIENTO BURBUJA
Descripción
Una manera simple de expresar el
ordenamiento de burbuja en
pseudocódigo es la siguiente:
Este algoritmo realiza el ordenamiento o
reordenamiento de una lista a de n
valores, en este caso de n términos
numerados del 0 al n-1, consta de dos
bucles anidados uno con el índice i, que
da un tamaño menor al recorrido de la
burbuja en sentido inverso de 2 a n, y un
segundo bucle con el índice j, con un
recorrido desde 0 hasta n-i, 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.
Esta comparación se repite en el centro
de los dos bucles, dando lugar a la
postre a una lista ordenada, puede verse
que el número de repeticiones sola
depende de n, y no del orden de los
términos, esto es, si pasamos al
algoritmo una lista ya ordenada, realizara
todas las comparaciones exactamente
igual que para una lista no ordenada,
esta es una característica de este
algoritmo, luego veremos una variante
que evita este inconveniente.
Para comprender el funcionamiento,
veamos un ejemplo sencillo:
Tenemos una lista de números que hay
que ordenar:

Podemos ver que la lista que


tiene cinco términos, luego:

El índice i hará un recorrido de 2


hasta n:
Que en este caso será de 2 a 5. Para
cada uno de los valores de i, j tomara
sucesivamente los valores de 0 hasta n-
i:

Para cada valor de j, obtenido en ese


orden, se compara el valor del índice j
con el siguiente:

Si el termino j es mayor que el termino


j+1, los valores se permutan, en caso
contrario se
continúa con la
iteración.
Para el caso
del ejemplo,
tenemos que:

Para la primera iteración del primer


bucle:
y j tomara los valores de 0 hasta 3:

Cuando j vale 0, se comparan , el 55


y el 86, dado que 55 < 86 no se
permutan el orden.
Ahora j vale 1 y se comparan el 86 y
el 48 Como 86 > 48, se permutan, dando
lugar a una nueva lista.
Se repite el proceso hasta que j valga 3,
dando lugar a una lista parcialmente
ordenada, podemos ver que el termino
de mayor valor esta
en el lugar más alto.
Ahora i vale 3, y j
hará un recorrido de
0 a 2.
Primero j vale 0, se
comparan , el 55 y el 48, como 55 >
48 se permutan dando lugar a la nueva
lista.
Para j = 1 se compara el 55 con el 16 y
se cambian de orden.
Para j = 2 se compara el 55 y el 82 y se
dejan como están, 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 termino
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 últimas comparaciones,
como se puede ver.
Ahora ya i vale 4 y j
recorrerá los valores de
0 a 1.
Cuando j vale 0, se
comparan esto es el
48 y el 16 dado que 48 es mayor que 16
se permutan los valores, dando lugar a
una lista algo más ordenada que la
anterior, desde esta nueva ordenación, j
pasa a valer 1, con lo que se comparan
los términos el 48 y el 55 que quedan
en el mismo orden.
En este caso la burbuja ha ascendido
menos que en los casos anteriores, y la
lista esta ya ordenada, pero el algoritmo
tendrá que completarse, realizando una
última iteración.
Hay que tener en cuenta que el bucle
realiza un número fijo de repeticiones y
para finalizar tendrán que completarse,
aun en el caso extremo, de que la lista
estuviera previamente ordenada.
Por último i vale 5 y j solo puede vale 0,
con lo que solo se realizara una
comparación de el 16 y el 48, que ya
están ordenados y se dejan
igual.
Los bucles finalizan y
también el procedimiento,
dejando la lista ordenada.
Una variante que finaliza en
caso de que la lista esté ordenada,
puede ser la siguiente: como en el
ejemplo anterior, empleando un centinela
ordenado, que detecta que no se ha
modificado la lista en un recorrido de la
burbuja, y que por tanto la lista ya está
ordenada, finalizando.
******ESTE PROGRAMA ORGANIZA
DATOS CON EL METODO DE
BURBUJA*********

TITLE PRAC6_1
.MODEL SMALL
.STACK 100h
.DATA
MSG1 DB 'INTRODUZCA
DIGITOS Y ENTER PARA TERMINAR:
$'
ARREGLO DB 100 DUP(0)
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV SI,0
LEA DX, MSG1
MOV AH,9
INT 21h
XOR CX,CX
MOV CL,13
MOV CH,0
XOR BX,BX
XOR DX,DX
MOV BX,1
MOV AH,1
PIDE_DATO:
CMP DL,CL
JE ORDENA
INT 21h
CMP AL,CL
JE ORDENA
MOV ARREGLO[SI],AL
INC SI
JMP PIDE_DATO
ORDENA:
MOV BP,SI
CONTINUA:
CMP SI,0
JE FIN
CMP SI,1
JE IMPRIME
MOV DL,1
MOV CX,BP
MOV SI,0
BURBUJA:
CMP DL,0
JE IMPRIME
MOV DL,0
MOV BL,ARREGLO[SI]
MOV BH,ARREGLO[SI+1]
CMP BL,BH
JBE OTRO
MOV AL,ARREGLO[SI]
MOV ARREGLO[SI],BH
MOV ARREGLO[SI+1],AL
INC SI
MOV DL,1
DEC CL
CMP CL,1
JE CONTINUA
JMP BURBUJA
OTRO:
INC SI
DEC CL
CMP CL,0
JE ORDENA
JMP BURBUJA
IMPRIME:
MOV AH,2
MOV DL,10
INT 21h
MOV AH,2
MOV DL,13
INT 21h
MOV CX,BP
MOV SI,0
CICLO:
CMP CL,0
JE FIN
MOV DL,ARREGLO[SI]
INT 21h
INC SI
DEC CL
JMP CICLO
FIN:
MOV AH,4CH
INT 21h
MAIN ENDP
END MAIN
Ejercicio 8: Escribir un programa que
ordene un vector de mayor a menor.
name "arreglo-mayor"
org 100h
mov cx, 8
bucle1:
mov c, cx

mov bx, cx
mov cx, 9

bucle2:
mov si, cx
mov ah, v[si-1]
cmp ah,v[bx-1]
jnge seguir ;Si v[8] < v[7] no hacer nada,
sino:
mov dh, v[bx-1] ;Copiar v[7] en dh
mov dl, v[si-1] ;Copiar v[8] en dl
mov v[bx-1], dl ;Copiar dl en v[7]
mov v[si-1], dh ;Copiar dh en v[8]
seguir:
loop bucle2

mov cx, c
loop bucle1
ret
v db 2,32,64,32,98,12,5,21,91
c dw 0

También podría gustarte