渐进运行时间 O(n)
public int KthFind(int []A,int p,int r,int k)
{
if(p==r) return A[p];
int i=p,j=r;
Random random=new Random(System.currentTimeMillis());
int q=Math.abs(random.nextInt())%(r-p+1)+i;
int temp=A[q];
A[q]=A[i];
A[i]=temp;
while(j>i)
{
while(j>i&&A[j]>temp)j--;
A[i]=A[j];
System.out.println("hello");
while(j>i&&A[i]<=temp)i++;
A[j]=A[i];
System.out.println("i="+i+" j="+j);
}
A[j]=temp;
int t=j-p+1;
if(k==t) return A[j];
else if (k<t){
return KthFind(A, p, j-1, k);
}
else {
return KthFind(A, j+1, r, k-t);
}
}