堆的学习笔记
文章平均质量分 59
fengsigaoju
本科:南京邮电大学
座右铭:凤兮凤兮思高举!
展开
-
堆的调整
#includeint h[8]={-1,1,2,3,4,5,6,7};//这里假设有这样一个堆,用来测试向下调整的正确性,后面会讲到堆的建立,第一个数不用int n;void siftdown(int i)//从某个节点作为根节点向下调整{ int t,temp;//应该是父节点小,子节点大,而一旦子节点小,就需要调整了~~ while (i*2 {原创 2015-07-15 19:56:13 · 866 阅读 · 0 评论 -
堆排序
//堆排序的根据是什么,就是每个堆的顶部的元素一定是最小值,那么我先建一个堆,每次记录下堆顶元素,然后把重新排列(这里有点技巧),减少堆的元素个数。//注意堆的n是会变化,所以要先记录下来。//处于同一层的节点大小不能判断,所以每次提取了堆顶元素就必须重新维护一次。(代码在sort部分)#include int a[101];int n;void down(int i)原创 2015-07-16 19:41:32 · 310 阅读 · 0 评论 -
堆的建立
对堆的常见操作一般有两种,一种是新增一个值并将其置于堆顶,然后对堆进行调整,另一种是仅仅新增一个值,将元素放入堆的顶部,这样就带来两种不同的堆的建立。第一种方式是通过每次将元素置于堆的底部,然后调整,采用类似插入排序的方法,保证每次调整后,都是最小堆。时间复杂度O(NlogN)#include //建立一个堆第一种方法int h[101];void up(int i)//这原创 2015-07-15 20:12:23 · 722 阅读 · 0 评论 -
数据结构--我的哈夫曼编译系统
哈夫曼编译系统原创 2015-10-23 01:13:10 · 3703 阅读 · 1 评论 -
堆的应用!--求第k大数
求一个数列中的第k大的数,将前k个数建最小堆,后面若比堆顶元素还小,则舍去,否则将堆顶置换成该元素,然后维护堆,最后输出堆顶元素~~若求第k小的数,则只需建最大堆即可。#include int a[101];int n; void down(int i) { int t,temp; while(i*2 {原创 2015-07-16 19:48:24 · 3340 阅读 · 0 评论