找出一个数组中的最小的k个数
思路:
1.先对前k个数进行排序
2.使用插入排序的思想将后面的小元素插入到前k个数中
3.返回前k个数
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] arr, int k) {
ArrayList<Integer> result=new ArrayList<Integer>();
if(arr.length<k||k<=0) return result;
//对前n个进行插入排序
for(int i=0;i<k;i++) {
//要操作的数
int current=arr[i];
//下标
int preIndex=i-1;
while(preIndex>=0&¤t<arr[preIndex]) {
arr[preIndex+1]=arr[preIndex];
preIndex--;
}
arr[preIndex+1]=current;
}
//插入
for(int i=k;i<arr.length;i++) {
if(arr[i]<arr[k-1]) {
int current =arr[i];
int index=k-1;
while(index>=0&¤t<arr[index]) {
arr[index+1]=arr[index];
index--;
}
arr[index+1]=current;
}
}
//把前n个加入result
for(int i=0;i<k;i++) {
result.add(arr[i]);
}
return result;
}
}