冒泡排序 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 个值进行排序的问题。但是,如果您正在寻找一种可以输入可变数量的值并对它们进行排序的解决方案,请查看这些答案:
我正在尝试使用 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 个值进行排序的问题。但是,如果您正在寻找一种可以输入可变数量的值并对它们进行排序的解决方案,请查看这些答案: