day 10 堆

107 阅读1分钟
    1. 性质:每个父节点都小于其子节点(最小堆)
    2. 数组实现:1是根节点 2x为x的左节点,2x+1为右节点
    3. up操作:将其本身与其父节点比较,如果小于父节点,交换
    4. down操作:将其本身与其子节点比较,与最小的交换
    5. 堆的建立:for(int i=n/2;i;i--)down(i);此时时间复杂度为O(n)
    6. 堆的插入和删除操作的时间复杂度都是O(log n)
    7. 基本操作:
      1. 插入一个数:heap[++size]=x;up(size);
      2. 求集合当中的最小值heap[1]
      3. 删除最小值heap[1]=heap[size];size--;down(1);
      4. 删除任意一个元素heap[k]=heap[size];size--;down(size);up(size)
      5. 修改任意一个元素heap[k]=x;down(k);up(k); 基本实现如下:

code.png