题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
这里先用排序,将原来的数组排序,去前k个值则可以完成任务!但此处并没有要求最后获得的数组是有序的,所以可以创建含k个
元素的数组。原数组的0-(k-1)个位置的值直接复制到新建的数组。原始数组从第k个位置开始,每取出一个值,和新建数组的最大值
相比较,然后决定是否替换新建数组中的最大值!
#include <iostream>
void findmin(int* scr,int* des,int s,int d);
int findmax(int* des,int d);
int main()
{
using namespace std;
int s = 10;
int d = 3;
int scr[10] = {3,5,9,1,7,2,4,10,8,6};
int des[3] = {0};
findmin(scr,des,s,d);
for (int i=0;i<d;i++)
cout<<des[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
void findmin(int* scr,int* des,int s,int d)
{
for (int i =0;i<d;i++)
des[i] = scr[i];
for (int i=d;i<s;i++)
{
if (scr[i]<des[findmax(des,d)])
des[findmax(des,d)] = scr[i];
}
}
int findmax(int* des,int d)
{
int maxdata = des[0];
int pos = 0;
for (int i=0;i<d;i++)
{
if (maxdata<des[i])
{
maxdata = des[i];
pos = i;
}
}
return pos;
}