您的位置:首页 > 其它

快速排序求第k小元素

2015-11-30 00:22 459 查看
#include<stdio.h>

#include<cmath>

#include<cstring>

const int maxn=100;

int n,k;

int a[maxn];

void swap(int &x,int &y)

{

int t;

t=x;

x=y;

y=t;

}

int Partition(int a[],int left,int right)//求出p位置到r位置这么多元素中的i大元素

{

int temp=a[left];

while(left<right)

{

while(left<right&&a[right]>temp)

right--;

// a[left]=a[right];

while(left<right&&a[left]<=temp)

left++;

//a[right]=a[left];

swap(a[left],a[right]);

}

a[left]=temp;

return left;

}

int RandmizeSelect(int a[],int p,int r, int k)

{

if(p==r)return a[p];

int i=Partition(a,p,r);

if(i==k)return a[i];

int j=i-p+1;//p到i一共有这么多元素

if(k<=j) return RandmizeSelect(a,p,i,k);

else return RandmizeSelect(a,i+1,r, k-j);

}

int main()

{

freopen("input.txt","r",stdin);

freopen("output.txt","w",stdout);

scanf("%d%d",&n,&k);

for(int i=1;i<=n;i++)

scanf("%d",&a[i]);

printf("%d",RandmizeSelect(a,1,n,k));

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: