我正在尝试理解以下文字:
给你一个列表,它刚刚使用标准分区算法进行了分区。你要说哪个元素可能是分区元素。例如,给定数字 [7, 6, 8, 20, 11, 5, 14],那么只有 8 可能是分区元素,算法将继续对 [7, 6] 和 [20, 11, 5, 14].
我想了解 8 是这里的分隔元素吗?谢谢
最佳答案
在快速排序迭代结束时,主元 p(分区元素)左侧的每个元素都必须小于 p,而右侧的每个元素都必须大于 p。这意味着 p 现在处于其最终排序位置。快速排序算法在两个结果子数组(左和右)上递归进行。
在快速排序过程中给定数组的配置,您可以使用这个简单的二次过程识别可能已在上一次迭代中使用的主元:
foreach int m in the array
if (all int l on the left of m verify l < m)
AND (all int r on the right of m verify r >= m)
then
m was a possible pivot in the previous iteration
你可以做得比 O(n^2) 更好,但这是基本思想。
关于algorithm - 分区元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40678543/