递归树和时间复杂度
递归算法的思想是将大问题分解为小问题,小问题再分解为小小问题,一直分解到足够小,不能分解为止。我们把这一层一层的分解过程画成一棵树,这个树就叫递归树。
以递归排序为例,分析一下递归排序的时间复杂度。
从归并排序递归树我们发现,每一层的归并操作消耗的时间总和是一样的,都是n,那么只需要知道树的高度h,就可以算法时间复杂度O(n*h)。
这个递归树是一个满二叉树,而满二叉树的高度是logn,所以归并排序的时间复杂度是O(nlogn)。
快速排序的时间复杂度
快读排序最好情况下,每次分区都一分为二,根据上面介绍的,时间复杂度是O(nlogn)。但是当不是一分为二时时间复杂度是多少呢?例如,每次分区的比例为1:9。此时利用递归树计算时间复杂度。
同样每层遍历的数据之