通过用户输入使用 MIPS 进行冒泡排序
Bubble sort using MIPS by user input
我是 MIPS 的新手。
好的,所以我的整个程序是,关于用户输入 10 个整数,然后我们将其存储在一个数组中,然后计算最小值和最大值,然后打印出未排序的数组。然后我们开始我现在正在努力的冒泡排序算法,我不会 post 我的整个程序,因为它很多,我只会 post 我的冒泡排序算法。
这是我的算法思考过程,所以首先我初始化我的计数器和数组的大小。
然后我开始我的外循环,如果我 == 大小,它是到 endouter 的分支,
然后是内循环,如果 j == size 则分支到 endinner,
然后得到我比较的两个索引,
然后比较,如果我的第一个索引大于第二个索引,则交换。由于某种原因,我遇到了无限循环的异常,有人帮忙吗?
#BubbleSort
li $t2, 0 #outer counter = 0 i
li $t1, 9 #size of array 0-9
li $t8, 1 #inner counter j
outer: beq $t2,$t1, endouter #branch to endouter if i < 0
inner: beq $t8,$t1, endinner #branch to endinner if j < size
li $t9, 1
sub $t9,$t8, $t9 #j - 1
lw $t4,array($t9) #load (j-1) into temp
lw $t5,array($t8) #load j into temp
blt $t4,$t5, noswap #if (j-1) < j branch to no swap
lw $t4,array($t8) #swithc (j-1) with j
lw $t5,array($t9) #swithc (j-1) with j
noswap: add $t8,$t8, 1 #increment j
j inner
endinner:
add $t2,$t2,1
li $t8, 1
j outer
endouter:
试试这个:
li $t0, 0 #outer counter = 0 i
li $t1, 40 #9 #size of array 10 * 4 bytes
li $t8, 40 #inner counter j
outer: blt $t0,$zero, endouter #branch to endouter if i < 0
inner_j:
subiu $t8,$t8,4
li $t0,0
beq $t8,$t0,endouter #branch to endouter if j == i
inner_i:
lw $t4,array($t0) #load i into temp
lw $t5,array($t8) #load j-1 into temp
blt $t4,$t5, noswap #if (j-1) < j branch to no swap
sw $t4,array($t8) # swap
sw $t5,array($t0) # swap
addiu $t0,$t0,4
beq $t0,$t8,inner_j
j inner_i
noswap:
addiu $t0,$t0, 4 #increment j
beq $t0,$t8,inner_j
j inner_i
endouter:
我是 MIPS 的新手。 好的,所以我的整个程序是,关于用户输入 10 个整数,然后我们将其存储在一个数组中,然后计算最小值和最大值,然后打印出未排序的数组。然后我们开始我现在正在努力的冒泡排序算法,我不会 post 我的整个程序,因为它很多,我只会 post 我的冒泡排序算法。
这是我的算法思考过程,所以首先我初始化我的计数器和数组的大小。 然后我开始我的外循环,如果我 == 大小,它是到 endouter 的分支, 然后是内循环,如果 j == size 则分支到 endinner, 然后得到我比较的两个索引, 然后比较,如果我的第一个索引大于第二个索引,则交换。由于某种原因,我遇到了无限循环的异常,有人帮忙吗?
#BubbleSort
li $t2, 0 #outer counter = 0 i
li $t1, 9 #size of array 0-9
li $t8, 1 #inner counter j
outer: beq $t2,$t1, endouter #branch to endouter if i < 0
inner: beq $t8,$t1, endinner #branch to endinner if j < size
li $t9, 1
sub $t9,$t8, $t9 #j - 1
lw $t4,array($t9) #load (j-1) into temp
lw $t5,array($t8) #load j into temp
blt $t4,$t5, noswap #if (j-1) < j branch to no swap
lw $t4,array($t8) #swithc (j-1) with j
lw $t5,array($t9) #swithc (j-1) with j
noswap: add $t8,$t8, 1 #increment j
j inner
endinner:
add $t2,$t2,1
li $t8, 1
j outer
endouter:
试试这个:
li $t0, 0 #outer counter = 0 i
li $t1, 40 #9 #size of array 10 * 4 bytes
li $t8, 40 #inner counter j
outer: blt $t0,$zero, endouter #branch to endouter if i < 0
inner_j:
subiu $t8,$t8,4
li $t0,0
beq $t8,$t0,endouter #branch to endouter if j == i
inner_i:
lw $t4,array($t0) #load i into temp
lw $t5,array($t8) #load j-1 into temp
blt $t4,$t5, noswap #if (j-1) < j branch to no swap
sw $t4,array($t8) # swap
sw $t5,array($t0) # swap
addiu $t0,$t0,4
beq $t0,$t8,inner_j
j inner_i
noswap:
addiu $t0,$t0, 4 #increment j
beq $t0,$t8,inner_j
j inner_i
endouter: