#include<bits/stdc++.h>
using namespace std;
void swap(int tree[],int i,int j)
{
int temp = tree[i];
tree[i] = tree[j];
tree[j] = temp;
}
void heapify(int tree[],int n,int i)
{
if(i>=n)
return ;
int c1 = 2*i+1;
int c2 = 2*i+2;
int maxx = i;
if(c1<n&&tree[c1]>tree[maxx])
{
maxx = c1;
}
if(c2<n&&tree[c2]>tree[maxx])
{
maxx = c2;
}
if(maxx!=i)
{
swap(tree,maxx,i);
heapify(tree,n,maxx);
}
}
void build_heap(int tree[],int n)
{
int last_node = n-1;
int parent = (last_node-1)/2;
int i;
for(i = parent;i>=0;i--)
{
heapify(tree,n,i);
}
}
void heap_sort(int tree[],int n)
{
build_heap(tree,n);
int i;
for(i=n-1;i>=0;i--)
{
swap(tree,i,0);
heapify(tree,i,0);
}
}
int main()
{
std::ios::sync_with_stdio(false);
int tree[1000100];
int n,m;
cin>>n>>m;
for(int q=0;q<n;q++)
cin>>tree[q];
heap_sort(tree,n);
for(int i=n-1;i>=n-m;i--)
cout<<tree[i]<<" ";
return 0;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布