处理流式数据中MAX N问题

来源:互联网 发布:杰洛特的母亲 知乎 编辑:程序博客网 时间:2024/05/16 03:30

题目:要求找出数据流中最大的5个数

思路:构建一个5个元素的最小堆,循环处理,每次和堆顶元素比较即可

#include <stdio.h>#include <stdlib.h>#include <assert.h>inline void swap(int arr[], int i, int j){        int tmp = arr[i];        arr[i] = arr[j];        arr[j] = tmp;}void min_heap(int arr[], int size, int i){        int l = 2*i+1;        int r = l + 1;        int idx = i;        if(l < size && arr[l] < arr[i])                idx = l;        if(r < size && arr[r] < arr[idx])                idx = r;        if(idx != i)        {                swap(arr, i, idx);                min_heap(arr, size, idx);        }}int main(int argc, char* argv[]){        int in;        const int max_s = 5;        int arr[max_s];        memset(arr, 0, sizeof(arr));        while(scanf("%d\n", &in) == 1)                  //初始化最小堆        {                if(arr[0] < in)                {                        arr[0] = in;                        min_heap(arr, max_s, 0);                //更新堆                }        }        for(int i = 0; i < max_s; i++)                  //输出结果                printf("%d\n", arr[i]);        return 0;}

原创粉丝点击