输入一个数组,包含15个元素,要求求出数组中前10个最小值,依次输出。
方法:查找前k个最小值最直接的方式是遍历输入数组k遍,每次找出剩下输入中的最小值,每次查找过程中采用交换的策略。
代码:
#include <set>
#include <iostream>using namespace std;
bool find_min_k(int input[],int result[],int input_count,int output_count)
{
if(input_count < output_count) return false;
set<int> s;
for (int i = 0; i < output_count; ++i)
{
s.insert(input[i]);
}
for (int i = output_count; i < input_count; ++i)
{
set<int>::iterator tempIt = --s.end();
if(input[i] < *tempIt)
{
s.erase(tempIt);
s.insert(input[i]);
}
}
int i = 0;
for (set<int>::iterator it = s.begin(); it != s.end(); ++it)
{
result[i++] = *it;
}
return true;
}
int main()
{
int myarray[] = {20,26,45,4,8,21,47,14,35,23,37,11,39,42,16};
int m = 15;
int n = 7;
int *result = new int[n];
if(find_min_k(myarray,result,m,n))
{
for (int i = 0; i < n; ++i)
{
cout<<result[i]<<endl;
}
}
return 0;
}
结果: