从数组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