阅读背景:

自己练习的找第K大的数。

来源:互联网 

用的是快排的思想,可以实现前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);
    }
}/**
 * Created by ky



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: