4.查找最小的k 个元素

来源:互联网 发布:定制婴儿知乎 编辑:程序博客网 时间:2024/05/17 05:11
题目:输入n 个整数,输出其中最小的k 个。

例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。

分析:我以前做过一道让我们求第k小数,当时我用的是快排的思想,时间复杂度比快排的n*log(n)少了不少,但还不是线性的。

快排思想代码实现:

#include<iostream>#include<string>#define N 1000using namespace std;int n,k;int partition(int l,int r,int a[]){int key=a[l],index=l,i;for(i=l+1;i<r;i++){if(key>a[i]){index++;swap(a[index],a[i]);}}swap(a[l],a[index]);return index;}void quickSort(int l,int r,int a[]){if(l<r){int mid=partition(l,r,a);if(k>=l&&k<=mid)  quickSort(l,mid,a);else  quickSort(mid+1,r,a);}}int main(){int i;int a[N];while(cin>>n>>k){k--;for(i=0;i<n;i++)cin>>a[i];quickSort(0,n,a);for(i=0;i<=k;i++)cout<<a[i]<<" ";cout<<endl;}return 0;}

可能还有更好的办法,以后找到了再补上!

0 0