找到数组中最小的K个数

快速排序速度最快,但是必须将数组全部载入内存,在数据量为百亿级别时候不可采用,当然如果你的内存是白菜价你可以肆无忌惮的用。对于高数量级的数组,可采用堆排序。

package MyPackage;

import java.util.*;

public class Solution {
	public static void main(String[] args) {
		int[] input=new int[]{1,2,2,4,11,5,6,74,12,8};
		System.out.println(Arrays.toString(findK(input, 5)));
	}
    public static int[] findK(int[] input,int k){
    	int start=0,end=input.length-1;
    	int index=partion(input, 0, end);
    	while(index!=k-1){
    		if(index
下边是最大堆的实现。
package MyPackage;

import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;

public class Tem {
	public static void main(String[] args) {
		System.out.println(Arrays.toString(findKthLargest(new int[]{4,5,1,3,6,6,13,154,6,34,6134,123,613,13}, 5)));
	}
	public static int[] findKthLargest(int[] nums, int k) {
	    PriorityQueue queue = new PriorityQueue(k,new Comparator() {
	    	@Override
	    	public int compare(Integer o1, Integer o2) {
	    		return o1>o2?-1:(o1k){
	            queue.poll();
	        }
	    }
	    int[] result=new int[k];
	    int i=0;
	    while(queue.peek()!=null){
	    	result[i++]=queue.poll();
	    }
	    return result;
	}
}


你可能感兴趣的:(找到数组中最小的K个数)