冒泡排序 4 个数字

Bubble sort 4 numbers

我正在尝试使用 LMC 编写冒泡排序代码,但是,它不太好。

首先,它永远循环,我无法找出原因,也许一双新鲜的眼睛会有所帮助?

我不确定是否需要添加“排序 4”部分。

        INP
        STO NUM1
        INP 
        STO NUM2
        INP
        STO NUM3
        INP 
        STO NUM4
BEGIN   LDA ZERO
        STA INCRE
        LDA NUM2
        SUB NUM1
        BRP SORT2
        LDA ONE
        STO INCRE
        LDA NUM1
        STO PLHOLDER
        LDA NUM2
        LDA PLHOLDER
        STO NUM2
SORT2   LDA NUM3
        SUB NUM2
        BRP SORT3
        LDA ONE
        STO INCRE
        LDA NUM2
        STO PLHOLDER
        LDA NUM3
        STO NUM2
        LDA PLHOLDER
        STO NUM3
SORT3   LDA NUM4
        SUB NUM3
        BRP OUTPUT
        LDA ONE
        STO INCRE
        LDA NUM2
        STO PLHOLDER
        LDA NUM4
        STO NUM3
        LDA PLHOLDER
        STO NUM4
OUTPUT  LDA INCRE
        BRZ NOINCRE
        BRA BEGIN
NOINCRE LDA NUM1
        OUT
        LDA NUM2
        OUT
        LDA NUM3
        OUT
        LDA NUM4
        OUT
        HLT
NUM1    DAT
NUM2    DAT
NUM3    DAT
NUM4    DAT
INCRE   DAT
PLHOLDER DAT
ONE     DAT 001
ZERO    DAT 000

我正在为此使用 LMC。

算法没问题,但你有两个小的、意想不到的错误:第二个是无限循环的原因(对于某些输入)。

见下方更正中的评论:

#input: 4 3 1 2
        INP
        STO NUM1
        INP 
        STO NUM2
        INP
        STO NUM3
        INP 
        STO NUM4
BEGIN   LDA ZERO
        STA INCRE
        LDA NUM2
        SUB NUM1
        BRP SORT2
        LDA ONE
        STO INCRE
        LDA NUM1
        STO PLHOLDER
        LDA NUM2
        STO NUM1    -- was missing
        LDA PLHOLDER
        STO NUM2
SORT2   LDA NUM3
        SUB NUM2
        BRP SORT3
        LDA ONE
        STO INCRE
        LDA NUM2
        STO PLHOLDER
        LDA NUM3
        STO NUM2
        LDA PLHOLDER
        STO NUM3
SORT3   LDA NUM4
        SUB NUM3
        BRP OUTPUT
        LDA ONE
        STO INCRE
        LDA NUM3   -- was wrong
        STO PLHOLDER
        LDA NUM4
        STO NUM3
        LDA PLHOLDER
        STO NUM4
OUTPUT  LDA INCRE
        BRZ NOINCRE
        BRA BEGIN
NOINCRE LDA NUM1
        OUT
        LDA NUM2
        OUT
        LDA NUM3
        OUT
        LDA NUM4
        OUT
        HLT
NUM1    DAT
NUM2    DAT
NUM3    DAT
NUM4    DAT
INCRE   DAT
PLHOLDER DAT
ONE     DAT 001
ZERO    DAT 000

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

这也回答了你的第二个问题:

I am unsure if I need to add a "sort 4" section or not either.

不,您不需要另一个这样的部分。由于每个部分比较两个连续的数字,当你输入4个数字时,你只需要3个。

通用解决方案

您已经解决了对 4 个值进行排序的问题。但是,如果您正在寻找一种可以输入可变数量的值并对它们进行排序的解决方案,请查看这些答案: