POJ3481(待完善版本,请看注释)
#include <iostream> using namespace std; //根据需求调整大小 #define SIZE 10 typedef struct Node{ int K; int P; }Node; Node big[SIZE]; Node small[SIZE]; int big_size=1; int small_size=1; void swap(Node x, Node y) { Node tmp; tmp.K = x.K; tmp.P = x.P; x.K = y.K; x.P = y.P; y.K = tmp.K; y.P = tmp.P; } void big_fixDown(Node heap[], int pos, int size){ int x = pos; if(x > size) return;//exit // 选出最大的 int l = 2 * x; int r = l + 1; int maxPos = x; if(l <= size && heap[maxPos].P < heap[l].P) maxPos = l; if(r <= size && heap[maxPos].P < heap[r].P) maxPos = r; if(maxPos != x){ //如果父节点不是最大的,进行互换,并在新的点上继续fixDown