#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int a[20]={0,29,23,20,22,17,15,26,51,19,12,35,40}; int cmp(int a,int b)//小根堆 { return a>b; } void make() { make_heap(&a[1],&a[13],cmp); for(int i=1;i<=12;i++) printf("%d ",a[i]); printf(" "); } void push() { a[13]=8; push_heap(&a[1],&a[14],cmp); for(int i=1;i<=13;i++) printf("%d ",a[i]); printf(" "); } void pop() { pop_heap(&a[1],&a[14],cmp); for(int i=1;i<=12;i++) printf("%d ",a[i]); printf(" "); } void px() { sort(&a[1],&a[13]);//排序时默认从小到大排 for(int i=1;i<=12;i++) printf("%d ",a[i]); printf(" "); } int main() { make();//制造一个堆 push();//在堆中放入元素 pop();//将堆尾元素放到堆顶后进行维护,堆顶元素放到堆尾 px();//排序 return 0; }