输入一个长度为 n的整数数列,从小到大输出前m大的数
作者:
瑾里
,
2023-06-20 00:03:31
,
所有人可见
,
阅读 107
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
void buffer(int i,int value){
int parent = (i-1)/2;
while ((i > 0) && (h[parent] > value))
{
m_heap[i] = m_heap[parent];
i = parent;
parent = (i-1)/2;
}
h[i] = value;
}
void BuildHeap(){
for(int i = n/2;i>=0;i--){
buffer(i,h[i]);
}
}
void FindMax(int m){
for (int i=0;i<m;i++){
printf("%d ",h[0]);
size1--;
h[0] = h[size1];
buffer(0,h[0]);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&h[i]);
}
size1= n;
BuildHeap();
FindMax(m);
return 0;
}