题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
class Solution {
public:
int findPos(vector<int>& input, int begin, int end)
{
int label = input[begin];
while(begin<end)
{
while(end>=0&&input[end]>=label)
end--;
input[begin] = input[end];
while(begin<end&&input[begin]<=label)
begin++;
input[end] = input[begin];
}
input[begin] = label;
return begin;
} //标兵就位
void qsort(vector<int>& input, int k, int begin, int end)
{
while(begin<end)
{
int pos = findPos(input,begin,end);
if(pos==k)
break;
else
if(pos>k)
end = pos-1;
else
begin = pos+1;
}
} //快排剪枝
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> ans;
if(k>input.size()||input.size()<1)
return ans;
qsort(input,k-1,0,input.size()-1); //快排
for(int i =0;i<k;i++)
ans.push_back(input[i]);
return ans;
}
};