我理解min-heap的基本工作,以下是它在Robert Sedgewick的书中的实现:
template <class Item>
class PQ
{
private:
Item *pq;
int N;
public:
PQ(int maxN)
{ pq = new Item[maxN]; N = 0; }
int empty() const
{ return N == 0; }
void insert(Item item)
{ pq[N++] = item; }
Item getmax()
{ int max = 0;
for (int j = 1; j < N; j++)
if (pq[max] < pq[j]) max = j;
exch(pq[max], pq[N-1]);
return pq[--N];
}
};
我无法理解的是getMax函数中的这两个语句:
exch(pq[max], pq[N-1]);
return pq[--N];
为什么我们需要将max元素与最后插入的第二个元素中的元素交换?
答案 0 :(得分:0)
他将最大元素交换到最后然后“弹出”它;通过减小“大小”变量(N),他实际上使最后一个元素(现在是最大)元素不可达,并且在下次插入元素时它将被覆盖。