Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRG Ord Ejem
PRG Ord Ejem
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
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)
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:
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