书中言:快速排序使用分而治之的策略,是一种优雅的排序算法。深以为然~
第四章:1.介绍了分而治之的思想;2.介绍与解释了快速排序;3.填了大O表示法的坑
- 分而治之
分而治之:一种著名的递归式问题解决方法。
讲述三个例子来引入该思想。1.农场主分割田,要求将地皮均匀地分成方块,且分出的方块尽可能大;2.求一个数字数组的元素之和;3.男猪脚:快速排序
-
找出基线条件,条件必须尽可能简单
-
不断将问题分解或者缩小规模,直到符合基线条件
分田的例子中,将一条边是另一条边的整数倍作为基线条件,递归条件为最小边是所切割的最大正方形边。具体看书很容易明白。
第二个例子相当于用递归的思想写出求和公式sum。作者是如何思考的,先找基线条件,他以经验告诉我们,一般数组类的问题,其基线条件都为数组为空或者为只包含一个元素。见下图:
如何找递归条件不断把问题循环下去,把问题慢慢分解呢?我们想到达到基线条件时数组最多为一个元素,那上一轮递归中呢?那得至少是两个元素吧,姑且算作两个,那再上一轮至少得是3个......我们想到了,每次递归我都摘出来一个数,也就是取出一个数,那么让其他数组去进行下面的递归。摘出来的那个数一般取第一个幸运儿[0]。