for(int i =1; i <= n; i++){int x;
cin >> x;
h[i]= x;//下标从1开始 从小到大,小顶堆//输入一个 x 从这两个位置进行调整push_heap(h +1, h + i +1, greater<int>());}
小顶堆
push_heap默认的大顶堆
从大到小
加第三个参数 greater()
成了小顶堆
手写实现
voidpusHeap(int x,int i){
h[i]= x;while(i !=1){//父节点int pai = i /2;//如果子小于父就要交换if(h[i]< h[pai])swap(h[i], h[pai]);elsebreak;//再看上面的节点有没有比他大的
i = pai;}}
mack_heap
一定要注意mack 和 push的不同
mack_heap 是从数据里建立一个堆
但是!!!
mack_heap 和 puhs_heap
他俩建立的堆 是不同的!!!
mack在建立的时候, 是把子节点最小的和父节点交换
例如
46 23 26 24 10
用push_heap 的结果
10 23 26 46 24
用mack_heap 的结果
10 23 26 24 46
代码
for(int i =1; i <= n; i++){
cin >> h[i];}make_heap(h +1, h + n +1);