java topK 快速排序 遞歸

題目描述:

輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

import java.util.*;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer>topk=new ArrayList();
        if(k>input.length){
            return topk;
        } 
        quickSort(input,0,input.length-1);
        for(int i=0;i<k;i++)
            topk.add(input[i]);
        return topk;
    }
   private void quickSort(int[]input,int left,int right){
       if(left>=right)return;
       int value=input[left];
       int l=left;
       int r=right;
       while(l<r){
           while(l<r&&input[r]>=value)r--;
           input[l]=input[r];
           while(l<r&&input[l]<=value)l++;
           input[r]=input[l];
       }
       input[r]=value;
       quickSort(input,left,r-1);
       quickSort(input,r+1,right);
   }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章