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

来源:互联网 发布:中兴百货知乎 编辑:程序博客网 时间:2024/05/16 14:20

题目:输入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;}