leetcode面试题 17.14. 最小K个数(快速排序,只排序一边)
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); } } }