题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,
利用快排:利用temp=a[0];然后从右到左找比temp小的数 ,从左往右寻找比temp大的数 指针l=0;指针r=a.length-1 直到l=r
原始:4,5,1,6,2,7,3,8 temp=4 l=0;r=7;
第一趟:3,5,1,6,2,7,3,8 r=6 l=0 右
第二趟: 3,5,1,6,2,7,5,8 r=6;l=1 左
第三趟: 3,2,1,6,2,7,5,8 r=4,l=1 右
第四趟: 3,2,1,6,6,7,5,8 r=4,l=3 左
第五趟:3,2,1,6,6,7,5,8 l=r=3 右
最后令:a[l]=temp 即 3,2,1,4,6,7,5,8
public class GetLeastNumbers_Solution1 {
public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> array=new ArrayList<Integer>();
if (input==null||input.length==0||input.length<k||k<=0) {
return array;
}
int index=quickSort(input,0,input.length-1);
while(index!=k-1){
if(index<k-1){
index= quickSort(input,index+1,input.length-1);
}
if(index>k-1){
index= quickSort(input,0,index-1);
}
}
for(int i=0;i<k;i++){
array.add(input[i]);
}
return array;
}
static int quickSort(int[] input, int l, int r) {
int temp=input[l];
while(l<r){
while(l<r&&input[r]>=temp){
r--;
}
input[l]=input[r];
while(l<r&&input[l]<=temp){
l++;
}
input[r]=input[l];
}
input[l]=temp;
return l;
}
public static void main(String[] args) {
int [] a={4,5,1,6,2,7,3,8};
ArrayList<Integer> array=new ArrayList<Integer>();
array=GetLeastNumbers_Solution(a,6);
for(int i=0;i<array.size();i++){
System.out.print(a[i]+" ");
}
}
}