Я пытаюсь реализовать алгоритм сортировки вставками, но у меня проблема с получением размера массива и элементов массива от пользователя. Я объявил размер массива вверху и после сортировки он просто печатает размер массива со многими нулями. Я не знаю, как я могу изменить размер массива или удалить те автозаполненные нули, я могу изменить направление сортировки, но это всего лишь дешевый трюк:)
Например:
Размер массива: 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