您的位置:首页 > 其它

100题_05 查找最小的k个元素

2011-03-04 06:13 344 查看
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。

不多说了,这个题是一个老题了,最简单的办法就是用大顶堆了,每次遍历数组与堆顶元素进行比较,如果比堆顶小,就替换堆顶,继续调整为大顶堆。

代码如下:

View Code #include "MaxHeap.h"
#include <iostream>

using namespace std;

int *min(int a[], int n, int k) // 找出数组中前k个最小的
{
MaxHeap<int> mh(k);
int i;
for (i = 0; i < k; i++)
mh.Insert(a[i]);
for (; i < n; i++)
{
int max = mh.PeekMax();
if (a[i] < max)
mh.ReplaceMax(max);
}
int *result = new int[k];
for (i = k -1; i >= 0; i--)
{
result[i] = mh.RemoveMax();
}
return result;
}

int main()
{
int a[] = {5,3,7,2,6,8,4,9,19,50,18,16};
int *x = min(a, 12, 5);
for (int i = 0; i < 5; i++)
cout<<x[i]<<' ';
cout<<endl;
delete[] x;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: