СОВЕТЫ: ​​Сортировка массива фиксированного размера приводит к печати нулей перед элементами пользовательского ввода - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь реализовать алгоритм сортировки вставками, но у меня проблема с получением размера массива и элементов массива от пользователя. Я объявил размер массива вверху и после сортировки он просто печатает размер массива со многими нулями. Я не знаю, как я могу изменить размер массива или удалить те автозаполненные нули, я могу изменить направление сортировки, но это всего лишь дешевый трюк:)

Например:

Размер массива: 4

входные данные: 1 2 3 4

выходные данные: 0 0 0 0

Я знаю, что 1 2 3 4 есть, но они остаются в конце.

Как я могу это выяснить? Вот мой код:

       .data 
array: .space 400
nodup: .space 400
mess: .asciiz " Enter a number to be stored in the array. "
 #10 element integer array
mess2: .asciiz " specify n: "
    .globl main
    .text 
main:
    jal read
    b exit
read:
    la $t1, 0
    li $t0, 0
    li $v0, 4       
    la $a0, mess2        
    syscall
    li $v0, 5     
    syscall
    move $t7, $v0
    mul $t7, $t7, 4
    b readArray
    jr $ra

readArray:
    beq $t1, $t7, sort   
    li $v0, 4       
    la $a0, mess        
    syscall
    li $v0, 5     
    syscall 
    sw $v0, array($t1)      
    addi  $t1, $t1, 4  
    b readArray
sort:
    init:
        la  $t0, array     
        add $t0, $t0, 40                             
   outter:             
        add $t1, $0, $0     
        la  $a0, array      
   inner:                  
        lw  $t2, 0($a0)         
        lw  $t3, 4($a0)         
        slt $t5, $t3, $t2       
        beq $t5, $0, continue   
        add $t1, $0, 1          
        sw  $t2, 4($a0)        
        sw  $t3, 0($a0)         
    continue:
        addi $a0, $a0, 4            
        bne  $a0, $t0, inner    
        bne  $t1, $0, outter   
print:
    li      $v0, 0
    la      $t1, array
    li      $t0, 0
printloop:
    bge     $t0, $t7, exit
    lw      $t2, 0($t1)
    addi    $t1, $t1, 4
    li      $v0, 1      
    move    $a0, $t2
    syscall
    li      $a0, 32 # for empty space
    li      $v0, 11 # print character
    syscall
    addi    $t0, $t0, 4
    j      printloop

 exit:
    li      $v0, 10
    syscall

1 Ответ

0 голосов
/ 24 октября 2019

Заменить эту инструкцию: slt $t5, $t3, $t2 на sgt $t5, $t3, $t2

...