快速排序的空间复杂度到底是多少?该怎么处理

快速排序的空间复杂度到底是多少?
如题 
有说 O(n) 有说 O(log n) 到底多少呢?
是不是,取决于分划基准的选择,每次都选在中间,O(log n)
若基本有序,退化为冒泡,O(n)
我理解的对不?

------解决方案--------------------
O(log n),就是递归的深度,递归的时候使用的栈空间
稍微优化一点的快排,比如取首尾中三个数据,取其中间的值作为划分标准,不会出现退化到冒泡的可能。
------解决方案--------------------
(nlog(n))
------解决方案--------------------
每次递归传参left,和right,平均递归次数是log(n)次,所以平均空间复杂度是O(log(n))。最坏的情况是O(n)(初始是逆序的情况)。
------解决方案--------------------
引用:
O(log n),就是递归的深度,递归的时候使用的栈空间
稍微优化一点的快排,比如取首尾中三个数据,取其中间的值作为划分标准,不会出现退化到冒泡的可能。

这种简单的优化也有可能退化到冒泡的。要确保不退化到冒泡,请参考算法导论第三版9.3章。