#include #include // 编译的时候加上:gcc xxx.cpp -lstdc++ class MaxPriorityQueueHeap { public: MaxPriorityQueueHeap(int maxN){ m_MaxN = maxN; m_pq = new int[m_MaxN]; }; bool isEmpty(){ return m_N == 0; } int size(){ return m_N; } void insert(int v){ m_pq[++m_N] = v; swim(m_N); } int delMax(){ int max = m_pq[1]; exch(1, m_N--); m_pq[m_N+1] = 0; sink(1); return max; } bool less(int i, int j){ return m_pq[i] < m_pq[j]; } void exch(int i, int j){ int temp = m_pq[i]; m_pq[i] = m_pq[j]; m_pq[j] = temp; } void swim(int k){ while(k>1 && less(k/2, k)){ exch(k/2, k); k = k/2; } } void sink(int k){ while(2*k <= m_N){ int j = 2*k; if(j M){ pq.delMax(); } } printf("筛选出来的最小的 %d 个 Transaction ********************\n",M); for(int j = 0; j