算法:查找序列最小k元素(分治法)

本文探讨了在无序序列中查找第k小元素的方法,通过递增排序思想,介绍了三种可能的情况及其处理方式。算法分析包括最好、最坏及平均情况的时间复杂度,为O(n)至O(n²)不等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题: 给定含有n元素的无序序列,求这个序列中第k(1<k<n)小的元素
求解 :无序序列在a[0…n-1],若将a递增排序,则第k小的元素为a[k-1]
❗a[s…t]既可表示初始序列,也可表示划分后的子序列
❗第k小元素下标为k-1
有三种情况:

  1. k-1= i, a[i]即为所求,返回a[i]。
  2. k-1<i , 第k小元素在a[s…i-1]子序列。
  3. 若*k-1> i *, 第k小元素在a[i+1…t]子序列。

✨代码实现如下:
在这里插入图片描述
在这里插入图片描述
算法分析:

最好情况: 每次划分基准恰好是中位数,T(n)=O(n);
最坏情况: 每次划分基准为序列中最大值或最小值,比较的次数为O(n²);
平均情况: 算法复杂度为O(n);

欢迎各路大神前来指导建议!😌

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值