博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉堆 删除 插入 调整 堆排序
阅读量:4216 次
发布时间:2019-05-26

本文共 1979 字,大约阅读时间需要 6 分钟。

以最大堆为例

#include
#define MAX 10000using namespace std;typedef struct Heap Heap;struct Heap{ int size; int data[MAX];};//堆调整 void adjust_heap(Heap *heap, int size, int i){ int parent, child; int t = heap->data[i]; for(parent = i; 2*parent+1 < size; parent = child){ child = parent*2+1; if(child + 1 < size && heap->data[child] < heap->data[child+1]) ++child; if(t < heap->data[child]) heap->data[parent] = heap->data[child]; else break; } heap->data[parent] = t;} //建立堆(调整法) Heap create_heap(int size){ Heap heap; heap.size = size; int x; for(int i = 0; i < size; ++i){ scanf("%d",&x); heap.data[i] = x; } for(int i = heap.size/2-1; i >=0 ; --i){ adjust_heap(&heap, heap.size, i); } return heap;}void swap(int *a, int *b){ int t = *a; *a = *b; *b = t;} //堆排序 void heap_sort(Heap *heap){ for(int i = heap->size-1; i > 0 ; --i){ swap(heap->data[0], heap->data[i]); adjust_heap(heap,i,0); } } //删除 任意元素 void heap_delet_val(Heap *heap, int val){ int i; for(i = 0; i < heap->size; ++i){ if(heap->data[i] == val) break; } swap(&heap->data[i], &heap->data[heap->size-1]); --heap->size; adjust_heap(heap, heap->size, i);}//删除顶部元素 int heap_delet_max(Heap *heap){ int val = heap->data[0]; swap(heap->data[0], heap->data[heap->size-1]); --(heap->size); adjust_heap(heap, heap->size, 0); return val;}//堆插入 void heap_insert(Heap *heap, int val){ ++heap->size; heap->data[heap->size-1] = val; int i; // 判断条件 写成 i!=0 而不能写成(i-1)/2 >= 0 后者 会进入死循环 for(i = heap->size-1; i != 0 && heap->data[(i-1)/2] < val; i = (i-1)/2){ heap->data[i] = heap->data[(i-1)/2]; } heap->data[i] = val; }int main() { int n; scanf("%d",&n); Heap heap = create_heap(n); //heap_sort(&heap); int old_size = heap.size;//删除元素 输出的时候 heap->size会变化 要提前记录size for(int i = 0; i < heap.size; ++i){ //printf("size = %d",heap.size); printf("%d ",heap.data[i]); } printf("\n"); heap_insert(&heap, 5); for(int i = 0; i < heap.size; ++i){ printf("%d ",heap.data[i]); } return 0; }

转载地址:http://tmimi.baihongyu.com/

你可能感兴趣的文章
驴妈妈管理的一点经验总结
查看>>
IOS开发学习的好资料大搜藏
查看>>
SSH的认证终结(无需密码的git操作或者ssh链接无需密码)
查看>>
Jetty 的工作原理以及与 Tomcat 的比较
查看>>
ssh-keygen的使用方法 注意权限问题
查看>>
zookeeper的server的集群配置实例[张振华-Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第一篇:互联网时代U盘化生存方式 【张振华.Jack】
查看>>
CentOS6.4配置Hadoop-2.6.0集群配置安装指南(经过实战演练)【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第二篇:专注的力量 [张振华.Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第三篇:我的舍与得的2014[张振华.Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第五篇:不要给自己找任何借口【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第七篇:请留意我们身边的风景 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第八篇:坚持的力量 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第九篇:春节那些事-过年回家不需要理由【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十一篇:马云乌镇40分钟演讲实录【张振华.Jack】
查看>>
Java并发编程从入门到精通 张振华.Jack --我的书
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十二篇:世界上最快的捷径【张振华.Jack】
查看>>
Android中Java代码和XML布局效率问题
查看>>
android TextView属性大全(转)
查看>>
Conclusion for Resource Management
查看>>