算法导论 RandomizedSelect

来源:互联网 发布:mysql 断电 无法启动 编辑:程序博客网 时间:2024/06/01 10:50
#include <stdio.h>#include <limits.h>#include <stdlib.h>int randomizedPartition(int a[],int p,int r){if(r<p)return -1;srand(47); int v = rand() % (r-p+1)+p;int temp=a[r];a[r]=a[v];a[v]=temp;int i=p-1,j=p,x=a[r];while(j<r){if(a[j]<x){i++;temp=a[j];a[j]=a[i];a[i]=temp;}j++;}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){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){return randomizedSelect(a,p,q-1,i);}else{return randomizedSelect(a,q+1,r,i-k);}}void main(){int a[6]={INT_MIN,99,8,43,2,21};int k=randomizedSelect(a,1,5,2);printf("%d",k);getchar();}

0 0
原创粉丝点击