如何解决气泡排序进入无限循环
我正在尝试使用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>
这也回答了您的第二个问题:
我不确定是否需要添加“ 4类”部分。
否,您不需要其他此类部分。由于每个部分都会比较两个连续的数字,所以当您输入4个数字时,您只需要3个即可。
通用解决方案
您已经解决了对4个值进行排序的问题。但是,如果您正在寻找一种可以输入可变数量的值并将其排序的解决方案,请查看以下答案:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。