题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
分析:
方法(1):排序(升序),找前k个数据
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
//在n个数中找最小的前k个数(排序)
vector<int> v;
if(k<=0 || input.size()<=0 || k>input.size())
return v;
sort(input.begin(), input.end());//默认是升序
int i=0;
while(i<k)
{
v.push_back(input[i]);
i++;
}
return v;
}
方法(2):用n个数据的前建k个元素的大堆,然后用剩下的元素与堆顶元素比较,比堆顶小的元素入堆,直到完,最后堆中保留的就是最小的前k个元素
//向下调整算法(建大堆)
void Adjustdown(vector<int>& a, int n, int parent)
{
int child=parent*2+1;//左孩子
while(