Top K问题-BFPRT算法、Parition算法

时间:2022-11-25 08:55:44

BFPRT算法原理

在BFPTR算法中,仅仅是改变了快速排序Partion中的pivot值的选取,在快速排序中,我们始终选择第一个元素或者最后一个元素作为pivot,而在BFPTR算法中,每次选择五分中位数的中位数作为pivot,这样做的目的就是使得划分比较合理,从而避免了最坏情况的发生。算法步骤如下

1. 将 Top K问题-BFPRT算法、Parition算法 个元素划为 Top K问题-BFPRT算法、Parition算法 组,每组5个,至多只有一组由 Top K问题-BFPRT算法、Parition算法 个元素组成。 
2. 寻找这 Top K问题-BFPRT算法、Parition算法 个组中每一个组的中位数,这个过程可以用插入排序。 
3. 对步骤2中的 Top K问题-BFPRT算法、Parition算法 个中位数,重复步骤1和步骤2,递归下去,直到剩下一个数字。 4. 最终剩下的数字即为pivot,把大于它的数全放左边,小于等于它的数全放右边。 
5. 判断pivot的位置与k的大小,有选择的对左边或右边递归。

求第 Top K问题-BFPRT算法、Parition算法 大就是求第 Top K问题-BFPRT算法、Parition算法 小,这两者等价。

基于Partition算法

  • 选择一个Position(称为基准),基于该算法的Top k算法,非常受Position好坏的影响,所谓的坏,有可能使时间复杂度达到O(n*n)。
  • 然后利用Partition算法进行划分,如果Partition得到的p小于K,则继续划分p的右边,如果p大于K,则继续划分p的左边,如果p等于K,则算法结束。

作者:远o_O
链接:https://www.jianshu.com/p/495e5019669c
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。