找到数组中任意小数据及间隔最小 数据

该博客探讨了如何在给定数组中高效地找到第k小的数字以及间隔最小的值。建议使用堆排序或选择排序,但推荐采用分治策略,结合快速排序的划分过程来缩小搜索范围。当存在重复数字时,需要避免划分错误导致死循环。对于寻找间隔最小值的问题,同样运用分治策略,将数组分为两部分并分别查找,最后从三者中选取最小间隔。
摘要由CSDN通过智能技术生成

                             找到一组数字中,第k小的数字

这个题目是:给定一个数组,找到数组中任意第k小的数字。看完这个题目,我想到的就是我把这个数组,进行排序。这时候我们想要第几小就可以得到第几小了哈,是不是很方便。

在选择的排序算法的时候我们尽量选择堆排序和选择排序,为什么呢?因为这两个排序算法,我们不需要将整个数组排序完,我们只需要将需要查找的排序出来就可以了。

但是这种方法肯定是费时的,我们可以用分治的思想去做,结合快排的一次划分来缩小规模。

 对于快排的一次划分,我们可以将基准的这个数字放进数组中,他所在的位置,也就是说前面的数据都是他小,后面的数据都比他大。换句话说它的下标就是他在数组中的第几小,这样我们就可以扔掉一部分规模,依次来找到元素中的第几小。

这里我们列举了一部分,我们只需要将得到的值,如果大于需要的就在左边找,小于就在右边找。

template<class Type>
int Partition(Type *ar, int left, int right)
{
	int i = left
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值