快速选择算法c++

快速选择算法是快速排序的变种,由相同作者提出,采用分治策略,时间复杂度为O(n)。算法目标是找到第n大的数,通过随机选择枢轴并分区,不断调整枢轴位置,直至找到目标。复杂度分析中,平均情况下时间复杂度接近N,最坏情况下为N^2。可以通过随机洗牌优化。此外,前后指针法也是一种实现策略,其中p和q分别代表前、后指针,p作为枢轴,q遍历数组元素,当q值大于p值时,p前移。
摘要由CSDN通过智能技术生成

Quick Selection原理

Quick Selection算法和Quick Sort算法是由同一个作者提出,这两者之间有很大的相似之处——分治,即将问题的规模一次次的减小,直到求出最终解,时间复杂度O(n),且数据无需有序

目标:找到第n大的数

  1. 随机产生一个pivot
  2. 根据这个pivot,将小于其值的数放左边,大于其值的数放右边
  3. 更新第n大数的估计值的位置,选择其中一边,直到=n
  4. 重复2、3步骤.

操作的情况大致如下图所示:v即为pivot
在这里插入图片描述

Quick Selection复杂度分析

假设找的数以平均情况计算(被找的数每次都在中间部分),令O(N)为总的时间复杂度,N+O(N/2)为第O(N)次查找所需要的时间。按照以下公式进行递推,可以推出,最终O(N)近似等于2N,即O(N)=N

而最坏情况时(被找的数每次都在最边上)O(N)=N2。当然也不用过于担心,有很多方式,通过重新洗牌,使数据尽量的无序,达到平均情况。(Shuffle、Turkeys’s ninth 等还是挺不错的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值