快速排序递归时,怎样解决递归层次过深问题?
在sort源码,通过参数_Ideal(元素的个数)
每次递归,对_Ideal进行缩减,直到_Ideal<=0的时候,转成堆排序。
递归过深会引发什么问题?
效率变慢
递归是函数自己调用自己,调用一次函数,就有函数的开销(栈帧开辟,压很多东西,弹出很多东西,栈帧回退),如果递归过深,说明函数调用次数过多,函数开销变大。
栈内存相对来说比较小,递归过深,说明函数调用次数过多,导致栈内存溢出,程序挂掉。
怎样控制递归深度?如果达到递归深度了,还没有排完怎么办?
没排完,转成另一个非递归的排序算法就可以了,一般用堆排序(平均,最坏,最好的时间复杂度都是一样的)。