#include<iostream>
#include<vector>
using namespace std;
class Heap
{
public:
Heap();
Heap(const Heap& heap);
void Push(int ele);
int Top() const ;
void Print()const ;
void Pop();
private:
int* arr;
int size;
int capacity;
};
Heap::Heap()
{
capacity = 10;
size = 0;
arr = new int[capacity];
arr[0] = 0x80000000;
}
Heap::Heap(const Heap& heap)
{
size = heap.size;
capacity = heap.capacity;
arr = new int[capacity];
for (int i = 0; i <= size; i++)
{
arr[i] = heap.arr[i];
}
}
void Heap::Push(int ele)
{
size++;
if (size >= capacity)
{
capacity *= 2;
int* new_arr = new int[capacity];
for (int i = 0; i <= size; i++)
{
new_arr[i] = arr[i];
}
delete[] arr;
arr = new_arr;
}
int index = size;
int parent = index / 2;
while (parent != 0 && ele > arr[parent])
{
arr[index] = arr[parent];
index = parent;
parent /= 2;
}
arr[index] = ele;
}
int Heap::Top() const
{
return arr[1];
}
void Heap::Pop()
{
if (size < 1)
{
return;
}
int parent = 1;
int child = parent * 2;
int val = arr[size];
while (child <= size)
{
if (child<size&&arr[child] < arr[child + 1])
{
child++;
}
if (val >= arr[child])
{
break;
}
arr[parent] = arr[child];
parent = child;
child *= 2;
}
arr[parent] = val;
size--;
}
void Heap::Print() const
{
for (int i = 1; i <= size; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
int main()
{
Heap h;
for (int i = 0; i < 100; i++)
{
h.Push(i);
}
vector<int> v;
for(int i=0;i<100;i++)
{
v.push_back(h.Top());
h.Pop();
}
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
return 0;
}
运行结果