小顶堆 就是堆得的Top永远是最小的,但是下面的大小是不保证的。
Code:
struct Heap{
int arr[1000];
int n;
void perdown(int p) /**堆排序的向下整理函数**/
{
int x = arr[p];
int child, parent;
for (parent = p; parent * 2 <= n; parent = child)
{
child = parent * 2;
if (child != n && arr[child+1] < arr[child]) child++;
if (x <= arr[child]) break;
arr[parent] = arr[child];
}
arr[parent] = x;
}
void heapsort() /**最小堆的主函数**/
{
for (int i = n / 2; i > 0; i--)
{
perdown(i);
}
}
int Delete() // 删除堆顶,将他放在数组最末端.
{
int x = arr[1];
arr[1] = arr[n--];
perdown(1);
return x;
}
void Insert(int x) //再堆尾插入一个数据
{
arr[++n] = x;
int i;
for (i = n; arr[i/2] > x&&i > 0; i /= 2)
arr[i] = arr[i/2];
arr[i] = x;
}
};