待解读源代码
上一章里我们讲了一个高效优雅的分区函数,源代码在此:
from utilities import swap
def partitionV2(arr, low, high):
if low >= high:
return -1
pi = low
li = low + 1
ri = high
while ri >= li:
if arr[li] > arr[pi]:
swap(arr, ri, li)
ri -= 1
else:
li += 1
pi = li - 1
swap(arr, low, pi)
return pi
可惜,虽然算法很好,while 循环却没搞明白是怎么运行的。
源代码解读方法
当我们读一段源代码读来读去读不明白的时候,应该怎么办呢?有些人工的或者机器辅助的方法能够帮助我们理解。
今天我们就讲两个解读算法源代码的方法:
- 一个是人工的:“人肉计算机”法
- 一个是机器辅助的:打印法
“人肉计算机”法
推演源码
有一种特别简单、直接又有效的代码理解方法:自己构造一个测试输入,然后扮演“人肉计算机”,按照源代码,一步步走完代码块的全过程。
遇到处理数组等线性数据结构的情况,我们可以用几个不同的指针来标识不同的下标变量,这样能够让整个过程看起来特别一目了然。
“人肉运行”
下面我们就用一个例子来演示一下“人肉计算机”法——亦步亦趋解读没能完全读