编程之美2.5 寻找最大的k个树

来源:互联网 发布:通信工程和java 编辑:程序博客网 时间:2024/05/16 08:52
5.查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。

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

#include <cstdlib>#include <iostream>#include <vector>using namespace std;void MaxHeapify(int a[], int i, int n){    int left = 2*i+1;    int right = 2*i+2;    int largest = i;    if(a[left] < a[i] && left <= n)        largest = left;    if(a[right] < a[i] && right <= n)        largest = right;    if(largest != i)    {        int temp;        temp = a[i];        a[i] = a[largest];        a[largest] = temp;        MaxHeapify(a, largest, n);    }}void print(int B[], int n){    for(int i = 0; i < 10; i++)           cout << B[i]<< " ";     cout<< endl;}int main(int argc, char *argv[]){    int a[10] = {32, 98, 33, 88, 75, 1, 34, 56, 100, 3};    int n = 9;    int t;    for(int i = n/2; i >= 0; i--)        MaxHeapify(a, i, n);    while(cin >> t)    {        if(a[0] < t)        {            a[0] = t;            MaxHeapify(a, 0, n);        }        print(a, n);    }    return 0;}