最小的k个数

时间:2017-08-25 16:25:50   收藏:0   阅读:239

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

 

快排序的思想就是把a[begin] 交换到它属于的第k位

 

 

  

public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        if(input == null)
            return null;
        ArrayList<Integer> list = new ArrayList<Integer>(k);
        if(k > input.length)
            return list;
        int low = 0;
        int high = input.length - 1;
        int index = partition(input,low,high);
        while(index != k-1){
            if(index > k-1){
                high = index - 1;
            }else{
                low = index + 1;
            }
            index = partition(input,low,high);
        }
       for(int i = 0; i < k; i++){
           list.add(input[i]);
       }
        return list;
    }
    //划分操作
    public int partition(int[] array,int start,int end){
        int pivot = array[start];
        while(start < end){
            while(start < end && array[end] >= pivot) end--;
            if(start<end)
                array[start++] = array[end];
            while(start < end && array[start] <= pivot) start++;
            if(start<end)
            array[end--] = array[start];
        }
        array[start] = pivot; 
        return start;
    }
                

 

原文:http://www.cnblogs.com/joshsung/p/7428533.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!