数组中最小的K个数
最小的K个数
http://www.nowcoder.com/questionTerminal/6a296eb82cf844ca8539b57c23e6e9bf
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
思路分析:用快速排序算法 排好顺序之后,再取出前K个数就是最小的数了
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> list = new ArrayList<>();
if(k > input.length){
return list;
}
//Arrays.sort(input);
quickSort(input, 0, input.length-1);
for(int i=0; i<k; i++){
list.add(input[i]);
}
return list;
}
private void quickSort(int[] a, int begin, int end){
if(begin > end || a.length == 0 || a == null){
return;
}
int num = a[begin];
int i = begin, j = end;
while(i!=j){
//比较数组最后的值与参考数的大小 如果大于参考数值 则将指针向前移
while(a[j] >= num && i<j){
j--;
}
while(a[i] <= num && i<j){
i++;
}
//执行到这里i索引上的值大于参考值 索引j上的值小于参考值 故而将i、j上的值互换
if(i<j){
int t = a[j];
a[j] = a[i];
a[i] = t;
}
}
a[begin] = a[i]; //将参考值和a[i]进行互换
a[i] = num;
quickSort(a, begin, i-1);
quickSort(a, i+1, end);
}
} 
