#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int randomizedPartition(int a[],int p,int r)
{
if(r==p)
return p;
srand(47);
int v=rand()%(r-p+1)+p;
int temp=a[r];
a[r]=a[v];
a[v]=temp;
int i=p-1,x=a[r];
for(int j=p;j<r;j++)
{
if(a[j]<x)
{
i++;
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
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)
{
while(p<=r)
{
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)
{
r=q-1;
}
else
{
p=q+1;
i-=k;
}
}
}
void main()
{
int a[6]={INT_MIN,99,4,56,23,8};
int k=randomizedSelect(a,1,5,2);
printf("%d ",k);
getchar();
}
算法导论 练习题 9.2-3
最新推荐文章于 2019-08-03 17:23:41 发布