#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
int randomizedPartition(int a[],int p,int r)
{
if(r<p)
return -1;
srand(47);
int v = rand() % (r-p+1)+p;
int temp=a[r];
a[r]=a[v];
a[v]=temp;
int i=p-1,j=p,x=a[r];
while(j<r)
{
if(a[j]<x)
{
i++;
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
j++;
}
temp=a[i+1];
a[i+1]=a[r];
a[r]=temp;
return i+1;
}
int randomizedSelect(int a[],int p,int r,int i)
{
if(p==r)
return a[p];
int q=randomizedPartition(a,p,r);
int k=q-p+1;
if(i==k)
return a[q];
else if(i<k)
{
return randomizedSelect(a,p,q-1,i);
}
else
{
return randomizedSelect(a,q+1,r,i-k);
}
}
void main()
{
int a[6]={INT_MIN,99,8,43,2,21};
int k=randomizedSelect(a,1,5,2);
printf("%d",k);
getchar();
}
算法导论 RandomizedSelect
最新推荐文章于 2021-11-12 16:14:15 发布