算法导论求第i小的元素

来源:互联网 发布:风衣款式图 带数据 编辑:程序博客网 时间:2024/05/29 16:48

算法导论求第i小的元素

#include <stdio.h>#include <stdlib.h>int partion(int a[],int p,int r){    int x=a[r-1];    int i=p-1;    int j=0,temp=0;    for(j=p;j<r-1;++j)    {        if(a[j]<=x)        {            i++;            temp=a[i];            a[i]=a[j];            a[j]=temp;        }    }    temp=a[i+1];    a[i+1]=a[r-1];    a[r-1]=temp;    return i+1;}int randomselect(int a[],int p,int r,int i){    if(p==r)        return a[p];    int q=partion(a,p,r);    int k=q-p+1;    printf("\n");    if(i==k)        return a[q];    else if(i<k)        return randomselect(a,p,q,i);    else return randomselect(a,q+1,r,i-k);}int main(){    int a[]={63, 34, 92, 34, 44, 16, 2, 39};    printf("%d\n",randomselect(a,0,sizeof(a)/sizeof(int),4));    return 0;}