little-man-computer - 冒泡排序 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>
这也回答了你的第二个问题:
我不确定是否需要添加“排序 4”部分。
不,您不需要另一个这样的部分。由于每个部分都会比较两个连续的数字,因此当您输入 4 个数字时,您只需要 3 个。
通用解决方案
您已经解决了对 4 个值进行排序的问题。但是,如果您正在寻找可以输入可变数量的值并对其进行排序的解决方案,请查看以下答案:
推荐阅读
- java - 项目中任何地方先前创建的代码上的未处理异常类型 JSONException
- python - 从运行命令的单独线程更新 Tkinter GUI
- azure - 具有多个环境的单实例 Azure Synapse
- django - Django自引用多对多模型
- file - 如果文件不存在如何创建空文件
- google-bigquery - 将 BigQuery 分区/集群键传播到 CTE 表 - 性能
- php - Laravel 验证浮点数长度(不是浮点值)
- python - 无法从具有 250k 值的 pandas 数据框列生成词云(非唯一,包括很多空白)
- flutter - PhoneAuthProvider.credential() 返回 AuthCredential 而不是 PhoneAuthCredential
- mysql - 为每行和 id mysql 附加最后 3 个日期条目