class heap
{
public:
heap(int *a = NULL, int n =0) :vc(a, a + n), _size(n)
{
;//数组构造堆,下标从0开始
}
void insert(int val)//插入到最堆的最后一个位置,并进行从下往上堆调整。
{
vc.push_back(val);
heapAdjust(0, vc.size());
}
void pop()//把堆顶的元素换到最末尾,并进行从上往下堆调整
{
swap(vc[0], vc[_size - 1]);
heapAdjust(0, _size - 1);
_size--;
}
void heapAdjust(int i,int n)//从i到n-1进行堆调整操作
{
if (i < 0 || n < 0 || vc.size() == 0)return;
int j;
while (i * 2 + 1 < n)
{
j = i * 2 + 1;
if (j + 1 < n && vc[j] < vc[j + 1])j++;
if (vc[i] >= vc[j])break;
swap(vc[i], vc[j]);
i = j;
}
}
void Makeheap()//生成堆
{
for (int i = (_size - 1) / 2; i >= 0; --i)//从下往上堆调整
heapAdjust(i, _size);
}
bool empty()
{
return _size == 0;
}
void show()
{
for (int i = 0; i < vc.size(); ++i)
{
cout << vc[i] << " ";
}
}
private:
vector<int> vc;
int _size;
};
vector实现的大根堆结构
最新推荐文章于 2024-07-26 11:58:24 发布