《剑指offer》JZ29最小的K个数

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。java

解析:插入排序吧,此题方法不少,初步先用一种方法排序

代码:input

import java.util.*;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> res = new ArrayList<>();
        if(k <= 0 || k > input.length){
            return res;
        }
        //对前k个数使用插入排序
        for(int i = 1; i < k; i++){
            int j = i - 1;
            int unFindElement = input[i];
            while(j >= 0 && input[j] > unFindElement){
                input[j+1] = input[j];
                j--;
            }
            input[j+1] = unFindElement;
        }
        //对后边的数与前k个比较,利用插入排序
        for(int i = k ; i < input.length; i++){
            if(input[i] < input[k-1]){
                int newK = input[i];
                int j = k-1;
                while(j >= 0 && input[j] > newK){
                    input[j+1] = input[j];
                    j--;
                }
                input[j+1] = newK;
            }
        }
        for(int i = 0; i < k; i++){
            res.add(input[i]);
        }
        return res;
        
    }
}io