您的位置:首页 > 其它

5.查找最小的k个元素(数组)

2012-10-12 15:38 211 查看
题目:输入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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐