题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
//快排,若begin>=k则直接无需排序
//如果end<=begin,也无需排序
void quick_sort(vector<int>&vec,int begin,int end,int k)
{
if(begin>=k)return;
if(end<=begin)return;
int mark_int=vec[begin];
int i=begin,j=end;
//用空位法实现快排核心代码部分
while(i<j)
{
while(i<j&&vec[j]>mark_int)
{
--j;
}
if(i<j)
vec[i++]=vec[j];
else break;
while(i<j&&vec[i]<=mark_int)
{
++i;
}
if(i<j)
vec[j--]=vec[i];
else break;
}
vec[i]=mark_int;
quick_sort(vec,begin,i-1,k);
if(i+1>k)return;
quick_sort(vec,i+1,end,k);
}
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if(k>input.size())return vector<int>();
quick_sort(input,0,input.size()-1,k);
vector<int> vec;
for(int i=0;i<k;++i)
{
vec.push_back(input[i]);
}
return vec;
}