用的是快排的思想,可以实现前k个最大的数。
/**
* Created by kyle on 2016/5/30.
*/
public class KstNumber {
static int partioion(int[] array, int start, int end, int k ){
int result;
int i= start;
int j = end;
int reference = array[start];
do{
while(array[j]>reference && i<j) j--;
if(i< j) array[i++] = array[j];
while(array[i]<= reference && i< j) i++;
if(i<j) array[j--]= array[i];
}while(i< j);
array[i]= reference;
if(i == k){
System.out.println("over");
return array[i];
}
if( i < k){
return partioion(array,i+1, end, k);
}else {
return partioion(array, start, i-1, k);
}
}
static public void main(String[] args){
int[] a= {12012, 3, 945, 965, 66, 232, 65, 7, 8, 898, 56, 878, 170, 13, 5};
int num = partioion(a,0, a.length-1, 4);
System.out.println("the kst number is "+num);
}
}