线性时间选择的随机划分函数是怎么回事啊~~~
Template <class type>
Type RandomizedSelect(Type a[ ],int p,int r,int k)
{
if(p==r) return a[p];
int i= RandomizedPatition(a,p,r);
j=i-p+1;
if(k<=j) return RandomizedSelect(a,p,i,k);
else return RandomizedSelect(a,i+1,r,k-j);
}
RandomizedPatition这个函数是什么意思啊~~
int RandomizedPatition(Type a[],int p,int r)
{
int i=Random(p,r);
Swap(a[i],a[p]);
return return partition(a,p,r,x);
}
int partition(int a[],int p,int r,int x)/*划分函数,划分基准为x */
{
int i=p,j=r+1;
Type x=a[p];
while(true)
{
while(a[++i]<x&&i<r);
while(a[--j]>x);
if(i>=j)break;
Swap(a[i],a[j])
}
a[p]=a[j];
a[j]=x;
return j;
}
谁能给我具体解释下线性时间选择到底是什么意思啊·