参考: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; }