数组修改的前提下
private static int partion(int[] a, int low, int high) {
// TODO Auto-generated method stub
int index=low+(int)Math.random()*(high-low+1);
int h=high;
int flag=a[index];
while(index<high)
{
while(index<high && a[high]>flag) high--;
if(index<high) a[index++]=a[high];
while(index<high && a[index]<flag) index++;
if(index<high)a[high--]=a[index];
}
a[index]=flag;
return index;
}
public static void main(String[] args) {
//最小的k个数
int a[]={4,5,1,6,2,7,3,8};
theLastKNumber(a,0,a.length,6);
}
private static void theLastKNumber(int[] a, int low, int high,int k) {
// TODO Auto-generated method stub
int start=0;
int end=high-1;
int index= partion(a,start,end);
while(index!=k-1)
{
if(index>k-1)
{
end=index-1;
index=partion(a,start,end);
}
else
{
start=index+1;
index=partion(a,start,end);
}
}
for(int i=0;i<k;i++)
{
System.out.print(a[i]+" ");
}
}