我是靠谱客的博主 欢喜墨镜,这篇文章主要介绍分治策略找第K小元素分治策略找第K小元素,现在分享给大家,希望可以做个参考。

分治策略找第K小元素

1.问题

使用特定的分治策略去寻找无序数组中第 k小的元素。

2.分析

2aPPGd.png

以此递归,直到剩余最后一个数,那个数就是第k小的数

3.算法

int Select(int a[],int l,int r,int k){
	if (l==r) return a[l];
	int i=l,j=r;
	
	int x = a[i];
	while(i<j){
		while(i<j && a[j]>=x) j--;
		a[i]=a[j];
		while (i<j && a[i]<=x)i++;
		a[j] = a[i];
	}
	
	a[i]=x;
	
	int num =i-l+1;
	
	if(num<k) return Select(a,i+1,r,k-num);
	
	return Select(a,l,i,k);
} 

4.分析

时间复杂度为O(n)

源码:https://github.com/Ace16602/-3/commit/8fe60146d60aa4bb4b62b2ba0ea0e8af7cfc6096

最后

以上就是欢喜墨镜最近收集整理的关于分治策略找第K小元素分治策略找第K小元素的全部内容,更多相关分治策略找第K小元素分治策略找第K小元素内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部