BFPRT

经典解法:
先用快排的partion,判断第N小个数在哪个范围,然后在那个范围重复partion过程,直到获得答案,时间复杂度为概率的O(N)。
步骤:

  1. 随机选取划分值
  2. partion过程,划分大于区域、小于区域、等于区域
  3. 看N是否在等于区域,如果不在,则在N所在区域重复1-3步骤。
BFPRT_第1张图片
image.png

BFPRT:
与经典解法的不同只在于第一步的选取划分值。时间复杂度为严格的O(N)。
划分值选取:

  1. 数组每相邻5个元素为一组 N个数 则有N/5组,若最后一组元素不够5个,那么剩余一组也成一组。
  2. 小组内部排序 O(N)
  3. 把每个小组的中位数拿出来组成一个新的数组
  4. 递归求新数组的上中位数
BFPRT_第2张图片
image.png
BFPRT_第3张图片
image.png
BFPRT_第4张图片
image.png
BFPRT_第5张图片
image.png

你可能感兴趣的:(BFPRT)