В чем проблема в моем алгоритме сортировки? - PullRequest
0 голосов
/ 07 июня 2019

Я написал функцию max, которая принимает максимальное значение списка и сохраняет его адрес в $v0, а значение в $v1. Я также написал функцию swap для обмена значениями между двумя адресами и другая функция, которая просто печатает значения в $a0 и $a1.

Теперь я отсортирую значения в списке от минимального до максимального значения. Для этого я использую функцию sort, которую я дал начальный адрес в $a0 и конечный адрес в $a1. Моя идея:

  1. Я использую max
  2. Я положил адрес max в $a0
  3. Я меняю значения между $a0 и $a1
  4. Я вставил $a0 начальный адрес list1 снова

Здесь моя проблема. Я пробовал так много разных вещей, но я не понимаю, и я действительно не понимаю, в чем проблема.

  1. Я хочу заменить адрес внутри $a1, 4 затем снова сортировать меньший список пока адреса в $a0 == $a1

  2. Перейти к отсортированному.


    .data
list:   .word 9, 8, 7, 3, 6, -4, 3, -1
list1:  .word 2, 5, 33, 4, 77, 22, 345, 88, 7, 99
list2:  .word 3, 5, 444, -4, 357, 23452, 1, -4588, 45, 38
list3:  .word 3, 345, 33, -43, -37, -34522, 1, -88, 5, 8
n:  .asciiz "\n"
    .text


main:

    la  $a0     list
    la  $a1     list+28 

    jal     print
    jal     swap
    jal     print


#######--------------------------------Start searching biggest Value in list1 list2 list3-----------------#########################

    la  $a0     list1
    la  $a1     list1+120
    jal     max
    add     $a0 $v1 $zero
    li  $v0 1
    syscall
    la  $a0 n
    li  $v0 4
    syscall

    ###-----sort---####


    la  $a0 list1
    la  $a1 list1+36
    j   sort
sorted: 

    li  $v0     10
    syscall
swap:

    lw  $t0     ($a0)
    lw  $t1 ($a1)
    sw  $t0     ($a1)
    sw  $t1     ($a0)   
    jr  $ra





max:

    lw      $t0 ($a0)
    la  $v0 ($a0)
    lw  $v1 ($a0)

do: 

        lw  $t4 ($a0)
    slt $t1 $t0 $t4         
    bgtz    $t1 change              
    la  $a0 4($a0)          
    beq $a0 $a1 finish          
    j   do

change: 

        lw  $t0 ($a0)
    la  $v0 ($a0)
    lw  $v1 ($a0)
    la  $a0 4($a0)
    j   do

finish: 

         jr $ra





print:

    la $t0 ($a0)    
    lw $a0 ($a0)
    li $v0 1
    syscall
    la $a0 n
    li $v0 4
    syscall
    lw $a0 ($a1)
    li $v0 1
    syscall
    la $a0 n
    li $v0 4
    syscall
    la $a0 ($t0)        
    jr $ra




sort:   

    jal max
    move    $a0 $v0
    jal swap
    jal     print

    la  $a0 list1
    sub $a1 4

    beq $a0 $a1  sorted
    j   sort
...