选择第k大的元素


从数组a[]的第p个到第r个元素中选择第i大的元素

int randomized_select(int a[],int p,int r,int i)/*选择第i大的元素,从p开始,到r结束*/
{
	int q,k;
	if(p == r){
		return a[r-1];
	}
	q = randomized_partition(a,p,r);
	k = q - p + 1;
	if(i == k){
		return a[q - 1];
	}
	else{
		if(i < k){
			return randomized_select(a,p,q-1,i);
		}
		else{
			return randomized_select(a,q+1,r,i-k);
		}
	}
}
int randomized_partition(int a[],int p,int r)/*数组划分函数*/
{
	int rand_key;
	rand_key = random(p,r);
	swap(a+r-1,a+rand_key-1);
	return partition(a,p,r);
}
int partition(int a[],int p,int r)/*数组划分函数*/
{
	int i,j,x;
	x = a[r - 1];
	i = p - 1;
	for(j=p;j

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注