微软面试100道之 5 查找最小的k个元素(数组)

来源:互联网 发布:旅游业发达的国家知乎 编辑:程序博客网 时间:2024/04/30 06:42

5.查找最小的k个元素(数组)
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。




#include <iostream>

using namespace std;


int main() {
    int a[]={10,6,3,9,15,12,7,5,8,9,45,12,3,2,45,78,1};
    int k;
    cout<<"输入k"<<endl;
    cin>>k;
    int b[50];

    for(int i=0; i<k; i++) {
        b[i] = a[i];
    }
    
    for(int l=0;l<k;l++) {//只可惜数组不能被引用
        for(int j=0; j<k-1; j++) {
            if(b[j]<=b[j+1]) {
                int t;
                t = b[j];
                b[j] = b[j+1];
                b[j+1] = t;
            }
        }
    }
    


    for(int m=k; m<(sizeof(a)/sizeof(a[0])); m++) {//有一件非常麻烦的事就是如何获得数组中元素的个数
        if(a[m]<b[0]) {
            b[0] = a[m];
            for(int l=0;l<k;l++) {
                for(int j=0; j<k-1; j++) {
                    if(b[j]<=b[j+1]) {
                        int t;
                        t = b[j];
                        b[j] = b[j+1];
                        b[j+1] = t;
                    }//可能用二分法排序会比较好
                }
            }
        }
    }

    for(int y=0; y<k; y++) {
        cout<<b[y]<<"  ";    
    }
}