BFPRT算法原理
在BFPTR算法中,仅仅是改变了快速排序Partion中的pivot值的选取,在快速排序中,我们始终选择第一个元素或者最后一个元素作为pivot,而在BFPTR算法中,每次选择五分中位数的中位数作为pivot,这样做的目的就是使得划分比较合理,从而避免了最坏情况的发生。算法步骤如下
1. 将个元素划为
组,每组5个,至多只有一组由
个元素组成。
2. 寻找这个组中每一个组的中位数,这个过程可以用插入排序。
3. 对步骤2中的个中位数,重复步骤1和步骤2,递归下去,直到剩下一个数字。 4. 最终剩下的数字即为pivot,把大于它的数全放左边,小于等于它的数全放右边。
5. 判断pivot的位置与k的大小,有选择的对左边或右边递归。
求第 大就是求第
小,这两者等价。
基于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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。