随机算法求数组中第k大的

import java.util.Random;

public class Find{

public int findK(int []array,int length,int k){

Random random=new Random();

int rand_index=
random.nextInt(length);

int temp1=array[0];

array[0]=array[rand_index];

array[rand_index]=temp1;

if(length>=2){

int i=1;

int j=1;

for(;j<length&&i<length;j++){

if(array[j]<array[0]){

if(i!=j){

int temp2=array[j];

array[j]=array[i];

array[i]=temp2;

}

i++;

}

}

i–;

if(i==k){

return array[0];

}

if(i>k){

int temp3=array[0];

array[0]=array[i];

array[i]=temp3;

findK(array,i,k);

}

if(i<k){

for(int p=0;p<length-1-i;p++){

array[p]=array[p+i+1];

}

findK(array,length-1-i,k-1-i);

}

}

return array[0];

}

}

点赞