【程序员升职记系列】三排序

第 28 关,三排序。指令介绍请看:https://www.annhe.net/article-3828.html

优化目标

34行78步

代码

62行75步

参考 Github。基本思路是,不动数字在地毯上的位置,改变outbox顺序:

  1. 将前两个数放到 1,3号地毯
  2. 3 - 1,如小于零,认为输出是 right 方向,取第三个数,如果比3号还小,那就直接输出,然后输出 3,1
  3. 如果比3号大但是比1号小,输出 3,2,1
  4. 如果比1号大,输出 3,1,2
  5. 3 - 1,如大于零,认为输出是 left 方向,取第三个数,如果比1号小,就直接输出,然后输出 1,3
  6. 如果比1号大但是比3号小,输出 1,2,3
  7. 如果比3号大,输出 1,3,2

代码行数还有优化空间,比参考代码多了16行

28行115步

参考 Github

如何不引入第三个变量交换2个变量的值(a, b)

  1. a, b-a
  2. b-a+a, b-a
  3. b-a+a, b-a+a-b+a

或者

  1. a-b, b
  2. a-b, b+a-b
  3. b+a-b-a+b, b+a-b

第N次 38行103步

第一次pass 44行109步

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注