Heap_delete(A,i)操作将结点i中的想从堆A中删去。对含n个元素的最大堆,请给出时间为O(lgn)的HEAP-DELETE的实现。
2012-12-17 22:42
375 查看
代码:
#include "iostream" using namespace std; int heap_size; int left(int i){ return 2*i; } int right(int i){ return 2*i+1; } void max_Heapify(int A[],int i){ int l,r,largest; l=left(i); r=right(i); int temp; if(l<=heap_size&&A[i]<A[l]) largest=l; else largest=i; if(r<=heap_size&&A[largest]<A[r]) largest=r; if(largest!=i){ temp=A[i]; A[i]=A[largest]; A[largest]=temp; max_Heapify(A,largest); } } void build_MaxHeap(int A[]){ heap_size=5; for(int i=heap_size/2;i>=1;i--){ max_Heapify(A,i); } } void heap_Delete(int A[],int i){ A[i]=A[heap_size]; heap_size--; max_Heapify(A,i); } void main(){ int A[20]={-1,12,2,43,23,3}; cout<<A[2]<<endl; build_MaxHeap(A); cout<<A[2]<<endl; heap_Delete(A,2); cout<<A[2]<<endl; getchar(); getchar(); }
相关文章推荐
- 10.2-5 用环形单链表来实现字典操作INSERT、DELETE和SEARCH,并给出它们的运行时间 算法导论答案
- 第六章堆排序之“删除最大堆中的指定元素HEAP-DELETE”(练习6.5-7)
- 实现一个栈(元素遵守先入后出顺序),能够通过 min 方法在 O(1)时间内获取栈中的最小元素。同时,栈的基本操作:入栈(Push)、出栈(Pop),也是在O(1)时间内完成的
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 设计队列容器的数据结构,使得返回最大元素的操作时间复杂度尽可能的低。
- HEAP-DELETE(A,i)操作将节点i中的项从堆中删去
- 在无头结点的动态单链表上实现线性表操作Delete(L,i)
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 算法导论Java实现-删除堆中元素HeapDelete(习题6.5-7)
- 改良stack的push操作,使得从stack中获取最大元素的时间复杂度为O(1) [转]
- 10.1-2 说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢,注意PUSH和POP操作的时间应为O(1)。
- 关于使用定义函数来实现对于数组c中的元素进行筛选最大值最小值,计算平均值等操作
- O(1)时间复杂度实现入栈、出栈、获得栈中最小元素、获得栈中最大元素
- 改良stack的push操作,使得从stack中获取最大元素的时间复杂度为O(1) [其实问题挺无聊]
- 实现一个栈,获取其中最大元素,获取时间复杂度为O(1)
- 栈模板的链表实现(包含头结点),实现了栈的压入,栈的弹出,返回栈顶元素,排序等操作
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- TensorFlow 用 tf.nn.max_pool 实现最大池化操作
- 操作数组的常用方式一----获取数组元素中最大值和最小值
- jsp jquery实现级联菜单,jquery对select元素的简单操作