微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对五个数字中的最小到最大排序

如何解决对五个数字中的最小到最大排序

我需要从最小到最大对五个数字进行排序。

我一直在为 Little Man 计算机模拟器的任务而苦苦挣扎。我尝试添加更多循环来添加 2 个输入数字,但它从未奏效。

3 个号码的工作分拣机:

         INP        // Read in the first value
         STA 91     // store it
         INP        // Read in the second value
         STA 92     // store it
         INP        // Read in the third value
         STA 93     // store it
         LDA 92     // LOOP 1,STEP 1:  
         SUB 91     // 
         BRP STEP2  // if r91 and r92 are in order,don't swap them
         LDA 92     // Begin swapping registers
         STA 99     // temp = r92
         LDA 91
         STA 92     // r92 = r91
         LDA 99
         STA 91     // r91 = temp
STEP2    LDA 93     // LOOP 1,STEP 2
         SUB 92
         BRP STEP3  // If r92 and r93 are in order,don't swap them
         LDA 93     // Begin swapping registers
         STA 99     // temp = r93
         LDA 92
         STA 93     // r93 = r92
         LDA 99
         STA 92     // r92 = temp
STEP3    LDA 92     // LOOP 2,STEP 1
         SUB 91
         BRP STEP4  // if r91 and r92 are in order,don't swap them
         LDA 92     // Begin swapping registers
         STA 99     // temp = r92
         LDA 91
         STA 92     // r92 = r91
         LDA 99
         STO 91     // r91 = temp
STEP4    LDA 91     // Write out the sorted values 
         OUT
         LDA 92
         OUT
         LDA 93
         OUT
         HLT        // stop

解决方法

现有代码有三个步骤用于比较和潜在交换。第一步比较前两个值,第二步比较后两个值,第三步和第一步一样:再次比较前两个值。

当您输入 5 个值时,您需要一个循环,否则您无法在可用的 100 个邮箱中进行所有必要的比较。为此,您可以使用像冒泡排序这样的算法,它还会比较相邻的值对:

  • 第 1 步:比较值 1 和 2
  • 第 2 步:比较值 2 和 3
  • 第 3 步:比较值 3 和 4
  • 第 4 步:比较值 4 和 5

每一步的代码就像你已经有了一样,除了你还要注意是否执行了交换。这将表明需要再次重复上述所有步骤。

你所包含的代码没有使用标签,很可惜注释中需要给数字命名,而大多数LMC模拟器都支持标签。

这是它的工作原理:

#input: 5 3 4 2 1
        INP
        STA NUM1
        INP 
        STA NUM2
        INP
        STA NUM3
        INP 
        STA NUM4
        INP
        STA NUM5
BEGIN   LDA ZERO
        STA DIRTY
        LDA NUM2
        SUB NUM1
        BRP STEP2
        LDA ONE
        STA DIRTY
        LDA NUM1
        STA TEMP
        LDA NUM2
        STA NUM1
        LDA TEMP
        STA NUM2
STEP2   LDA NUM3
        SUB NUM2
        BRP STEP3
        LDA ONE
        STA DIRTY
        LDA NUM2
        STA TEMP
        LDA NUM3
        STA NUM2
        LDA TEMP
        STA NUM3
STEP3   LDA NUM4
        SUB NUM3
        BRP STEP4
        LDA ONE
        STA DIRTY
        LDA NUM3
        STA TEMP
        LDA NUM4
        STA NUM3
        LDA TEMP
        STA NUM4
STEP4   LDA NUM5
        SUB NUM4
        BRP CHECK
        LDA ONE
        STA DIRTY
        LDA NUM4
        STA TEMP
        LDA NUM5
        STA NUM4
        LDA TEMP
        STA NUM5
CHECK   LDA DIRTY
        BRZ OUTPUT
        BRA BEGIN
OUTPUT  LDA NUM1
        OUT
        LDA NUM2
        OUT
        LDA NUM3
        OUT
        LDA NUM4
        OUT
        LDA NUM5
        OUT
        HLT
NUM1    DAT
NUM2    DAT
NUM3    DAT
NUM4    DAT
NUM5    DAT
DIRTY   DAT
TEMP    DAT
ONE     DAT 001
ZERO    DAT 000

<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.816/lmc.js"></script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。