#include <stdio.h>
#include <stdlib.h>
int PARTITION(int a[],int p,int r)
{
int x,i,j,t;
x=a[r];
i=p-1;
for(j=p;j<r;j++)
{
if(a[j]<=x)
{
i++;
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
t=a[i+1];
a[i+1]=a[r];
a[r]=t;
return i+1;
}
int RANDOMIZED_PARTITION(int a[],int p,int r)
{
int i,t;
// i=random(p,r); //随即生成i;
i=rand()%(r-p+1)+p;//生成p至r之间的随机数
t=a[r];a[r]=a[i];a[i]=t;
return PARTITION(a,p,r);
}
int RANDOMIZED_SELECT(int a[],int p,int r,int i)//选择函数
{
int k,q;
if(p==r)
return a[p];
q=RANDOMIZED_PARTITION(a,p,r);
k=q-p+1;
if(i==k)
return a[q];
else if(i<k)
return RANDOMIZED_SELECT(a,p,q-1,i);
else
return RANDOMIZED_SELECT(a,q+1,r,i-k);
}
int main()
{
int a[50],i,n,r;
printf("\n输入数据的长度:");
scanf("%d",&n);
printf("\n依次输入数据:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("\n输入要查询的:");
scanf("%d",&r);
printf("\n结果:%d\n",RANDOMIZED_SELECT(a,0,n-1,r));
}
线性选择算法(算法导论p109)
最新推荐文章于 2023-10-24 19:05:23 发布