REPORTE DE ALGORITMO DE ORDENAMIENTO BURBUJA - AlexDominguez18/MIPS_32_BITS GitHub Wiki

Diagrama de flujo del algoritmo a implementar (Método burbuja)

MetodoBurbuja

Explicación

El algoritmo método Burbuja es un método para ordenar datos, funciona comparando los datos que se quieren ordenar y determinar cuál es el menor, intercambiándolos si es necesario.

Los datos que se ordenarán, serán 5 y se cargaran en la memoria de datos.

Este algoritmo irá comparando desde la posición 0 número tras número hasta encontrar uno mayor, si este es el mayor de todo el arreglo lo llevará hasta la última posición y si no será reemplazado por uno mayor que él.

Este proceso seguirá así hasta que haya ordenado todos los datos del arreglo.

Viéndolo de una manera más sencilla: (Visualizando el arreglo como una lista) Empezamos comparando el numero que está abajo [1] con el numero de arriba [0], si el numero que está abajo es menor al que esta arriba se pasa arriba, es decir, el numero en la posición [1] se pasa a la posición [0] y viceversa, por lo que los números menores pasarán arriba y los números mayores pasarán hacia abajo, esto con el fin de ordenarlos de menor a mayor. Lo mismo se hace con las posiciones 3 y 2, 4 y 3, 5 y 4, cuando llegue a la posición 5 volverá a comparar desde el principio, así si hay un numero que debería estar en la posición 2 y está en la 4 llegará a su destino con éxito. Todo este proceso se seguirá repitiendo hasta que al compararlos todos los números estén de menor a mayor.

burbuja

Es un método que funciona bien, sin embargo, tiene un gran defecto, y es que hay ocasiones en las que los números están en su posición correcta, pero al comparar uno con otro se mueven para dejar pasar a un numero de una posición mas baja o mayor, haciendo que el numero que estaba en su posición se mueva y se tenga que comparar todo el arreglo de nueva cuenta.

Programa en Ensamblador

Después de analizar como funciona el ordenamiento burbuja procedimos a hacer el algoritmo en ensamblador utilizando las instrucciones que hace nuestro procesador MIPS. Lo que hace nuestro algoritmo es ordenar las primeras 5 posiciones de la Memoria de Datos usando el método burbuja. El algoritmo quedó de la siguiente manera:

ORDENAMIENTO BURBUJA ENSAMBLADOR

--000 00000000 nop $0, $0, $0

--004 0080F820 add $31, $4, $0

--008 00000000 nop $0, $0, $0

--00c 0000F020‬ add $30, $0, $0

--

--010 00000000 nop $0, $0, $0

--014 8FCD0000‬ lw $30, $13

--018 00000000 nop $0, $0, $0

--01c 03C1E020 add $28, $30, $1

--

--020 00000000 nop $0, $0, $0

--024 8F8E0000‬ lw $28, $14,

--028 00000000 nop $0, $0, $0

--02c 01CD302A‬ slt $6, $14, $13

-- --030 00000000 nop $0, $0, $0

--034 10C00003‬ beq $6, $0, #3

--038 AFCE0000‬ sw $30, $14

--03c 00000000 nop $0, $0, $0

--

--040 AF8D0000‬ sw $28, $13

--044 00000000 nop $0, $0, $0

--048 00000000 nop $0, $0, $0

--04c 00000000 nop $0, $0, $0

--

--050 23DE0001‬ add $30, $30, $1

--054 00000000 nop $0, $0, $0

--058 03DF302A‬ slt $6, $30, $31

--05c 00000000 nop $0, $0, $0

--

--060 10C1FFEC‬ beq $6, $1, #-20

--064 03E1F822‬ sub $31, $31, $1

--068 001F302A‬ slt $6, $0, $31

--06c 10C1FFE7‬ beq $6, $1, #-25

--

--070 00BE7822‬ sub $15, $5, $30

--074 00000000 nop $0, $0, $0

Explicación de su Funcionamiento

Con la instrucción lw saca el valor de j de la Memoria de Datos y lo guarda en el registro 13, con otra lw saca j+1 y lo guarda en el registro 14 (cuadros rojos en la imagen). Una vez guardados j en $13 y j+1 en $14 con la instrucción stl compara si j+1<j, en este caso 1<3 (cuadros morados) y como esta se cumple se guarda un 1 en el registro 6 (cuadro amarillo). Después con una instrucción beq compara lo que hay en el registro 6 y en el 0 y como en este caso son distintos no se hace el salto (cuadros verdes) y continua con la siguiente instrucción, usando dos sw guarda j en la posición 0 y j+1 en la posición 1 (cuadros naranjas).

Wave2

En la siguiente imagen el algoritmo vuelve a repetir las instrucciones pasadas saca j y lo guarda en $13, saca j+1 y lo guarda en $14 (cuadros rojos). Después compara con stl si j+1<j, en este caso 15<3 (cuadros morados) y en este caso no se cumple, por ello guarda un 0 en $6 (cuadro amarillo), Después con la instrucción beq compara $6 y $0 y como en este caso son iguales hace un salto (cuadros verdes) para no hacer las instrucciones sw ya que j+1 no es menor que j, en este caso 15<3 no se cumple y por eso no es necesario cambiarlos de posición.

Wave3

Pruebas de su Funcionamiento

Para saber si nuestro algoritmo funciona precargamos nuestra memoria de datos en las primeras 5 posiciones con números desordenados

Memoria de Datos OB

Al momento de hacer la simulación se obtienen los resultados deseados y se ordenan los números en la Memoria de Datos.

Memoria de Datos OB Ordenados