MIPS по возрастанию, сортировка по бубле по убыванию - PullRequest
0 голосов
/ 14 мая 2018

Я новичок в 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.

Но когда я пытаюсь превратить его в сортировку по убыванию, переключая $ s3 и $ s4 в bgt $ s3, $ s4, swap , я получаю такой вывод:

1750335520
87
78
56
54
43
42
23
21
15

Может кто-нибудь объяснить? Заранее спасибо.

1 Ответ

0 голосов
/ 14 мая 2018

Вы идете слишком далеко во внутреннем цикле. Прежде чем увеличивать и выходить из этого цикла, $ t5 = 9, а затем $ s1 будет указывать на последний элемент, а $ s2 - на последующий. Тогда вы получите иностранную стоимость (1750335520), пузырящуюся до вершины. Поскольку он оказался настолько большим, сортировка по возрастанию сработала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...