[英]Quick Sort recursion count
使用快速排序对 n 个元素的列表进行排序的最小递归调用数是多少。 我无法理解实际调用了多少次递归函数,特别是“最小数量”是什么意思
快速排序是一组算法,其中数据集通过选择枢轴值、对数据进行分区并在分区上递归直到分区大小小于 2 来排序。
简单的实现使用第一个、最后一个或中间元素作为枢轴并将数据划分为 2 个集合:
高效的实现使用精心设计的方法来选择枢轴值并将数据划分为 3 组:
他们也可能会切换到低于特定分区大小的不同算法,或者如果检测到病态分布,以避免二次时间复杂度。
对于 3 组实现,最佳情况是所有元素比较相等且不需要递归的情况。 这构成了递归调用的最小数量: 0
。
在其他情况下,递归调用的数量很大程度上取决于数据分布、枢轴选择方法和其他实现选择,例如:
平均而言,快速排序的递归调用次数约为:
请注意,递归深度是一个不同但重要的问题,可以通过结合迭代和递归,在较小的分区上递归并在较大的分区上迭代,将其限制为log 2 (n) 。
另请注意,快速排序可以在没有递归的情况下实现,使用长度为log 2 (n)的小数组来跟踪待处理的分区。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.