我是靠谱客的博主 欢喜墨镜,最近开发中收集的这篇文章主要介绍分治策略找第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小元素所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部