代码思路标准流程

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

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

  假设只包括单个元素时:
f ( x 1 ) = x 1 f(x_1)=x_1 f(x1)=x1

  假设元素个数为2个时:
f ( x 1 , x 2 ) = { x 1 , x 2 x 1 < = x 2 x 2 , x 1 x 1 > x 2 f ( 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,x2x1<=x2x2,x1x1>x2

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

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

  则每一步表示为:
s f ( x 1 ) = x 1 sf(x_1)=x_1 sf(x1)=x1
s f ( x 1 , x 2 ) = { x 1 , x 2 x 1 < = x 2 x 2 , x 1 x 1 > x 2 sf ( 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,x2x1<=x2x2,x1x1>x2

  第一轮表示为
r f ( x 1 , x 2 , … , x n ) = s f ( s f ( x 1 , x 2 ) [ 1 ] , x 3 ) [ 1 ] … rf(x_1, x_2,\dots,x_n)=sf(sf(x_1,x_2)[1], x_3)[1]\dots rf(x1,x2,,xn)=sf(sf(x1,x2)[1],x3)[1]

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

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

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

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

你可能感兴趣的:(Leetcode)