第 41 关,排序楼层。指令集介绍请看:https://www.annhe.net/article-3828.html。
优化目标
34 行 714 步。
代码
28行537步
插入排序,见 Github。
20行648步
选择排序,先全部读到地毯上,然后找出最小的输出,字符串最后一个填充输出的最小数的位置,字符串长度减1,直至长度为0。见 Github。
28行658步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
-- 大数放在前面,从后往前输出 -- 20 存放读入的数 JUMP init out1: BUMPUP 24 init: BUMPDN 24 next: BUMPUP 24 COPYTO 22 COPYTO 21 INBOX JUMPZ out COPYTO 20 COPYTO [22] BUMPDN 21 JUMPN next insert: COPYFROM 20 SUB [21] JUMPN next COPYFROM [21] COPYTO [22] COPYFROM 20 COPYTO [21] BUMPDN 22 BUMPDN 21 JUMPN next JUMP insert out: BUMPDN 24 JUMPN out1 COPYFROM [24] OUTBOX JUMP out |
28行663步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
-- 大数放在前面,从后往前输出 -- 20 存放读入的数 init: COPYFROM 24 -- 字符串下标 COPYTO 23 -- 待比较下标 BUMPDN 23 next: BUMPUP 23 COPYTO 22 COPYTO 21 INBOX JUMPZ out COPYTO 20 COPYTO [22] BUMPDN 21 JUMPN next insert: COPYFROM 20 SUB [21] JUMPN next COPYFROM [21] COPYTO [22] COPYFROM 20 COPYTO [21] BUMPDN 22 BUMPDN 21 JUMPN next JUMP insert out: BUMPDN 23 JUMPN init COPYFROM [23] OUTBOX JUMP out |
第一次pass 40行1225步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
init: COPYFROM 24 COPYTO 20 COPYTO 19 COPYTO 18 start: INBOX COPYTO [20] JUMPZ sortpre BUMPUP 20 JUMP start sortpre: BUMPDN 20 COPYTO 22 JUMPZ out sort: COPYFROM [20] COPYTO 23 COPYFROM 20 COPYTO 21 -- 19号存储已经排序的数量,20号如果和19号相等,就不需要在往前比较了,从结尾重新开始一轮冒泡 SUB 19 JUMPZ next BUMPDN 20 JUMPN next COPYFROM 23 SUB [20] JUMPN bubble JUMP sort bubble: COPYFROM [20] COPYTO [21] COPYFROM 23 COPYTO [20] JUMP sort next: BUMPUP 19 SUB 22 JUMPZ out COPYFROM 22 COPYTO 20 JUMP sort out: COPYFROM [18] JUMPZ init OUTBOX BUMPUP 18 JUMP out |
发表回复