代码思路标准流程

  首先引入几个基本概念。fff代表指定的函数。每一步(step)和每一轮(round)。假设为二重循环,则外层循环一次代表走一轮,而内层循环一次代表走一步。如果是一重循环,则循环一次代表走一步。

  以冒泡排序为例,假设冒泡排序为函数fff,则表达式即为f(x1,x2,,xn)f(x_1,x_2,\dots,x_n)f(x1​,x2​,…,xn​)。为了更好的理解复杂的情况,我们先理解最简单的情形:

  假设只包括单个元素时:
f(x1)=x1f(x_1)=x_1f(x1​)=x1​

  假设元素个数为2个时:
f(x1,x2)={x1,x2x1<=x2x2,x1x1>x2f ( x_1, x_2 ) = \left\{ \begin{array} { l } { x_1, x_2 \quad x_1 <=x_2 } \\ { x_2,x_1 \quad x_1>x_2 } \end{array} \right.f(x1​,x2​)={x1​,x2​x1​<=x2​x2​,x1​x1​>x2​​

  假设元素个数大于2,则表达式为f(x1,x2,,xn)f(x_1, x_2, \dots,x_n)f(x1​,x2​,…,xn​),那该如何进行处理呢?

  为了方便表示,我们将每一步操作表示为sf(step function),每一轮操作表示为rf(round function)。

  则每一步表示为:
sf(x1)=x1sf(x_1)=x_1sf(x1​)=x1​
sf(x1,x2)={x1,x2x1<=x2x2,x1x1>x2sf ( x_1, x_2 ) = \left\{ \begin{array} { l } { x_1, x_2 \quad x_1 <=x_2 } \\ { x_2,x_1 \quad x_1>x_2 } \end{array} \right.sf(x1​,x2​)={x1​,x2​x1​<=x2​x2​,x1​x1​>x2​​

  第一轮表示为
rf(x1,x2,,xn)=sf(sf(x1,x2)[1],x3)[1]rf(x_1, x_2,\dots,x_n)=sf(sf(x_1,x_2)[1], x_3)[1]\dotsrf(x1​,x2​,…,xn​)=sf(sf(x1​,x2​)[1],x3​)[1]…

  第二轮表示为
rf(x1,x2,,xn1)rf(x_1, x_2,\dots,x_{n-1})rf(x1​,x2​,…,xn−1​)

  第n轮表示为
rf(x1)=sf(x1)=x1rf(x_1)=sf(x_1)=x_1rf(x1​)=sf(x1​)=x1​
  思考题:对于冒泡排序来说,每一步和每一轮分别都做了什么样的处理呢?

  需要注意的是,第一轮表示的是f(x1,x2,,xn)f(x_1, x_2, \dots, x_n)f(x1​,x2​,…,xn​),第二轮表示的是f(x1,x2,,xn1)f(x_1, x_2,\dots, x_{n-1})f(x1​,x2​,…,xn−1​)。(该段只是对每一轮做了什么进行提醒)

  最后必须通过实例来模拟计算机执行过程。

上一篇:面试题 01.06. 字符串压缩


下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 2. SVC, SVS, ST & SF 指令