编程算法 - 最小的k个数 代码(C)

请解释一下在c语言中怎样编写在输入的N个数中找到k个最小的数

遍历,找出MAX,移除MAX,循环K遍

排序吧,再输出前k个数

我觉得你的问题是怎么将输入的数保存下来,你可以先定义一个vector.

vector vec;
int iNUm = 0;
while(cin>>iNum)//需要结束的时候输入ctrl+z;
{
vec.push_back(iNum);
}
//最后对整个vec进行排序,取得最小的值

将上面的vector改为vector vec;

可不可以这样,就是用三个只针,i非当前较小初始最左、j当前较大初始最大、m当i移动k次后才记录i的位置,当j比i大时交换位置,始终只有j在移动。保证当i到达最小时,m离i的距离为k。时间复杂度和空间复杂度都不是很大的样子

1 先将输入的前K个数排序并存储
2 用第K+1个数和这K个数中最大的数比较,若小于这K个数中最大的,则将最大的数删除,将这个数插入到合适位置;若这个数大于这K个数中最大的,则忽略.比较下一个数.
循环..............

前面的人方法都不好,可以维护一个大小 为k的最大树(根结点保存的是当前第k大的数),每次和根结点进行对比,若比根结点小,替换根结点,时间复杂度
nlogn.....面试如果这样说,肯定给你加分!!!反过来找k个最大数,就用最小树~~