package com.andy.springtransaction.aglorithm;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
//面试题 17.14. 最小K个数
class Solution {
public static void main(String[] args) {
int [] arr={1,3,5,7,2,4,6,1,8};
int k=4;
int[] ints = new Solution().smallestK(arr, k);
Arrays.stream(ints).forEach(System.out::println);
}
public int[] smallestK(int[] arr, int k) {
int[] result=new int[k];
if(arr==null||arr.length==0){
return result;
}
if(k<=0||k>=arr.length){
return result;
}
quickSort(arr,0,arr.length-1,k);
for(int i=0;i<k;i++){
result[i]=arr[i];
}
return result;
}
public void quickSort(int[] arr,int originStart,int originEnd,int k){
int start=originStart;
int end=originEnd;
int temp=arr[originStart];
if(start>=end){
return;
}
while(start<end){
while(start<end&&temp<=arr[end]){
end--;
}
if(start<end){
arr[start]=arr[end];
}
while(start<end&&temp>=arr[start]){
start++;
}
if(start<end){
arr[end]=arr[start];
}
}
arr[start]=temp;
if(start==k){
return;
}else if(start>k){
quickSort(arr,originStart,start-1,k);
}else{
quickSort(arr,start+1,originEnd,k);
}
}
}