最大堆

作者: 棒棒0_0 | 来源:发表于2018-09-01 15:10 被阅读0次
#define HEAP_MAX 40001
#define rint register int

int heap[HEAP_MAX];
int curSize;

void heap_insert(int data)
{
    heap[++curSize] = data;
    rint pos = curSize;
    rint parent = pos >> 1;
    while (parent)
    {
        if (heap[parent] < heap[pos])
        {
            int tmp = heap[pos];
            heap[pos] = heap[parent];
            heap[parent] = tmp;
            pos = parent;
            parent = parent >> 1;
        }
        else
            break;
    }
}

bool heap_delete(int &data)
{
    if (curSize == 0)
        return false;
    data = heap[1];
    heap[1] = heap[curSize--];

    rint parent_index = 1;
    rint max_index;
    while (1)
    {
        rint left = parent_index << 1;
        rint right = left + 1;
        if (left > curSize)
            break;

        max_index = parent_index;
        if (heap[parent_index] < heap[left])
            max_index = left;
        if (right <= curSize && heap[max_index] < heap[right])
            max_index = right;

        if (max_index != parent_index)
        {
            int tmp = heap[parent_index];
            heap[parent_index] = heap[max_index];
            heap[max_index] = tmp;
            parent_index = max_index;
        }
        else
            break;
    }
}

void Init(int N, int num[])
{
    curSize = 0;
    for (rint i = 0; i < N; i++)
        heap_insert(num[i]);
}

void Push(int num)
{
    heap_insert(num);
}

int Pop()
{
    int ret = 0;
    heap_delete(ret);
    return ret;
}

相关文章

  • 最大堆

  • 最大堆

    public static void main(String[] args){ Scanner in =new S...

  • 钱聚大堆

    每年过年回龙口老家,初二去舅舅家,饭后总要陪年近七旬的舅舅打几圈麻将,赌注不大,我不太会玩老家的规则,但每次我都会...

  • jvm

    初始和最大堆内存大小 -Xms和-Xmx可以说是最流行的JVM参数,它们可以允许我们指定JVM的初始和最大堆内存大...

  • 堆排序

    什么是堆排序?就是通过不断取出最大堆的堆顶元素。取完之后剩下的数据排序满足最大堆之后再次取堆顶元素,重复以上操作最...

  • MVP傻瓜式入门(一)

    网上介绍MVP的一大堆,分析官方MVP例子两大堆,然而臣妾看不太懂啊。让我们从最简单的地方开始。构建这么一个工程,...

  • 最大堆的实现

  • 优先队列/最大堆

    这里使用了一个静态构造器,表示反着排序 注意一个优先队列只能提供一方的最大/最小方法如果有问题,那就使用两个哈哈 ...

  • 今生最贵

    文/落英微湖 什么最昂贵? 健康最昂贵!学会放松,不要太累。要劳逸结合有进有退。工作只增不减一大堆...

  • 今生什么最贵?

    什么最昂贵? 健康最昂贵! 学会放松,不要太累。要劳逸结合有进有退。工作只增不减一大堆,忙于开会,忙于校对,...

网友评论

      本文标题:最大堆

      本文链接:https://www.haomeiwen.com/subject/mekuwftx.html