MIPS 升序冒泡排序到降序
MIPS ascending buble sort to descending
我是 MIPS 的初学者,希望有人能为我解答。这是我的 MIPS 代码,用于按升序对数组进行排序:
.data
nums: .word 10
elems: .word 23, 42, 54, 10, 56, 78, 15, 43, 21, 87
space: .asciiz " "
end: .asciiz "The end."
.text
la $s0, elems
lw $t4, nums
reset: li $t0, 0 #offset
li $t5, 0 #count up to nums
loop: add $s1, $s0, $t0
lw $s3, ($s1)
addi $t1, $t0, 4
add $s2, $s0, $t1
lw $s4, ($s2)
bgt $s3, $s4, swap
next: addi $t5, $t5, 1
addi $t0, $t0, 4
beqz $t4, exit
beq $t5, $t4, nummin
j loop
nummin: subi $t4, $t4, 1
j reset
swap: sw $s3, ($s2)
sw $s4, ($s1)
j next
exit: li $t0, 0
li $t1, 0
loop2: li $v0, 1
add $t2, $s0, $t1
lw $a0, ($t2)
syscall
li $v0, 4
la $a0, space
syscall
addi $t0, $t0, 1
addi $t1, $t1, 4
beq $t0, 10, done
j loop2
done: li $v0, 4
la $a0, end
syscall
代码有效,我得到了我想要的输出:
10 15 21 23 42 43 54 56 78 87 The end.
但是当我尝试通过在 bgt $s3, $s4, swap 中切换 $s3 和 $s4 将其转换为降序排序时,我得到以下输出:
1750335520
87
78
56
54
43
42
23
21
15
谁能解释一下?提前致谢。
你在内循环中走得太远了一步。在递增并离开该循环之前,$t5 = 9,然后 $s1 将指向最后一个元素,$s2 将指向其后的元素。然后你会得到一个冒泡到顶部的外部值(1750335520)。由于它恰好很大,所以升序排序。
我是 MIPS 的初学者,希望有人能为我解答。这是我的 MIPS 代码,用于按升序对数组进行排序:
.data
nums: .word 10
elems: .word 23, 42, 54, 10, 56, 78, 15, 43, 21, 87
space: .asciiz " "
end: .asciiz "The end."
.text
la $s0, elems
lw $t4, nums
reset: li $t0, 0 #offset
li $t5, 0 #count up to nums
loop: add $s1, $s0, $t0
lw $s3, ($s1)
addi $t1, $t0, 4
add $s2, $s0, $t1
lw $s4, ($s2)
bgt $s3, $s4, swap
next: addi $t5, $t5, 1
addi $t0, $t0, 4
beqz $t4, exit
beq $t5, $t4, nummin
j loop
nummin: subi $t4, $t4, 1
j reset
swap: sw $s3, ($s2)
sw $s4, ($s1)
j next
exit: li $t0, 0
li $t1, 0
loop2: li $v0, 1
add $t2, $s0, $t1
lw $a0, ($t2)
syscall
li $v0, 4
la $a0, space
syscall
addi $t0, $t0, 1
addi $t1, $t1, 4
beq $t0, 10, done
j loop2
done: li $v0, 4
la $a0, end
syscall
代码有效,我得到了我想要的输出:
10 15 21 23 42 43 54 56 78 87 The end.
但是当我尝试通过在 bgt $s3, $s4, swap 中切换 $s3 和 $s4 将其转换为降序排序时,我得到以下输出:
1750335520
87
78
56
54
43
42
23
21
15
谁能解释一下?提前致谢。
你在内循环中走得太远了一步。在递增并离开该循环之前,$t5 = 9,然后 $s1 将指向最后一个元素,$s2 将指向其后的元素。然后你会得到一个冒泡到顶部的外部值(1750335520)。由于它恰好很大,所以升序排序。