最大的K个数

参考:http://www.cnblogs.com/luxiaoxun/archive/2012/08/06/2624799.html

     http://www.cnblogs.com/mengdd/archive/2013/03/12/2954914.html

   http://www.cnblogs.com/luxiaoxun/archive/2012/09/11/2679743.html

  1)利用快速排序的方法,每次取middle假如middle==k-1那么它左边的正好是最小的k个数;假如middle>k-1则在它左边寻找;假如middle<k-1,则在右边寻找。

    public static void main(String[] args) {
        int [] array={10,7,9,3,11,2,15,6,17};
        new Main().quickSort(array, 0, array.length-1, 3);
    } 
    
    public void quickSort(int [] array ,int left ,int right,int k)
    {
        if(left<right)
        {
            int middle=getMiddle(array, left, right);
            if(middle==k-1)
            {
                for(int i=0;i<k;i++)
                {
                    System.out.println(array[i]);
                }
            }
            else if(middle<k-1)
            {
                quickSort(array, middle+1, right, k);
            }
            else 
            {
                quickSort(array, left, middle-1, k);
            }
        }
    }
    
    public int getMiddle(int [] array,int left,int right)
    {
        int pivot=array[left];
        while(left<right)
        {
            while(left<right && array[right]>pivot)
            {
                right--;
            }
            array[left]=array[right];
            while(left<right && array[left]<pivot)
            {
                left++;
            }
            array[right]=array[left];
        }
        array[left]=pivot;
        return left;
    }
原文地址:https://www.cnblogs.com/maydow/p/4824073.html