如何找到 MIPS 中的第二个最小值?

Posted

技术标签:

【中文标题】如何找到 MIPS 中的第二个最小值?【英文标题】:how can i find the second minimum value in MIPS? 【发布时间】:2021-07-09 07:33:07 【问题描述】:

在这个项目中,您将实现一个 MIPS 应用程序 找到第二个最小值 在声明的数组中。下面给出了如何定义整数数组。

enter image description here

价值观 包含数组元素,大小描述了数组的长度。

给出了一些示例数组和预期输出 n 下面。

数组:[13 , 16 , 16, 7, 7] 你的输出:13

数组:[ 8, 8, 8] 你的输出:没有第二小的

数组:[ 7, 7, 6] 你的输出:7

数组:[ 8, 7] 你的输出:8

数组:[3, 3, 5, 3, 3, 5] 你的输出:5

【问题讨论】:

使用您想要的任何排序算法按升序对数组进行排序,然后遍历排序后的数组,直到找到不等于第一个元素的元素,或者到达数组的末尾。 【参考方案1】:

这里是我对cmets问题的解决方法来解释一下。

我没有实现所有值都相同的特殊情况,但这不是一个非常困难的添加。只是最后一个beq $a1, $a2, end

这里还有很多特殊情况,比如检查最小和次小的保留空间中是否存在值。

也没有用户输入,因为不清楚这是否是最终意图。

.data


values: .word 13 , 16 , 16, 7, 7   # Array contents

.text


main:
    li $a0, 5           # Loading array size
    la $a3, values
    
    move $a2, $zero     # Second Smallest
    move $a1, $zero     # Smallest
        
                
    loop: 
    
        beq $t1, $a0, fin       # If iterator is equal to the high value entered break
        lw $t5, 0($a3)          # Loading the element at the given array address
    
        bnez $a2, sSmallestExists   # Branch if $a2 has a value -- there is a second smallest value
        bnez $a1, smallestExists    # Branch if $a1 has a valuel -- there is a smallest value 
        move $a1, $t5           # Set $a1 to the value stored at $t5 -- set the smallest value
        j reloop            # jump to reloop

    smallestExists:
        blt $t5, $a1, setSmallest   # Branch if the current value is less than the smallest value
        move $a2, $t5           # Set the second smallest to the current value
        j reloop            # jump to reloop

    sSmallestExists:
        bge  $t5, $a2, reloop       # If the current value in $t5 is greater than the second smallest reloop
        blt  $t5, $a1, setSmallest  # Branch if the current value in $t5 is less than the smallest
        beq  $t5, $a1, reloop       # If the current value in $t5 is equal to the smallest reloop
        move $a2, $t5           # Set the second smallest to the current value
        j reloop
    
    setSmallest:
        move $a2, $a1           # Set the current smallest value ($a1) to be the second smallest ($a2)
        move $a1, $t5           # Set the current value ($t5) to be the smallest ($a2)
    
    reloop:
        addi $t1, $t1, 1        # Add one to the iterator
        add $a3, $a3, 4         # Add 4 to progress the array
    
        j loop          # Go back to the top of the loop

fin:

    li $v0, 1           # Output second smallest value
    la $a0, ($a2)
    syscall
    
    li $v0, 10          # Syscall 10 to indicate end of program
    syscall

【讨论】:

以上是关于如何找到 MIPS 中的第二个最小值?的主要内容,如果未能解决你的问题,请参考以下文章

编写一个 Java 程序,求三个数的绝对值的第二个最小值

获取二维数组中每列的第二个最小值

元组对,使用 python 找到最小值

取最大值(最小值)简介代码

markdown 如何查找列表中的第二个最小数字

Leetcode 155. Min Stack