如何快速获取队列中的最大值?最简单的办法,用一个for循环遍历,复杂度为o(n).解法二:用大顶堆来实现,复杂度为哦o(1),但是入队和出队复杂度变为o(logN),堆中的每一个元素还得有个指针指向它的后继元素。解法三:可以使用两个栈来模拟队列,从右边的栈进入元素相当于入队,出队时,只有当左边的栈为...
分类:
其他好文 时间:
2014-12-13 12:09:16
阅读次数:
173
为了方便快捷高效率的求得集合中权值最小的2个元素,我采用堆数据结构,它可以以O(logn)的复杂度取得n个元素中的最小值。为了绕过对堆的实现,我采用标准模板库中的相应标准模板——优先队列。利用语句:priority_queue Q; 建立一个保存元素为int的堆Q,但是此时建立的堆默认是大顶堆...
分类:
其他好文 时间:
2014-11-19 17:43:25
阅读次数:
194
一般情况下我们使用的堆都是大顶堆或者小顶堆,其能实现在常数时间内获得数组的最大值或者最小值,同时满足在对数时间内删除和插入元素。但是如果要同时实现即能在常数时间内获得最大值和最小值,又能在对数时间内删除和插入元素,通常情况下的堆就不能满足上述要求了。为此介绍一种新的数据结构min-max heap
min-max heap 是一颗完全二叉树,但是二叉树的奇数层存的是max元素,偶数层存的是min...
分类:
其他好文 时间:
2014-11-19 01:48:30
阅读次数:
378
堆排序(heap sort) 具体解释 及 代码(C++)本文地址:http://blog.csdn.net/caroline_wendy堆排序包括两个步骤:第一步:是建立大顶堆(从大到小排序)或小顶堆(从小到大排序), 从下往上建立; 如建堆时, s是从大到小;第二步: 是依次交换堆顶和堆底, 并...
分类:
编程语言 时间:
2014-10-31 13:23:24
阅读次数:
275
堆数据结构实际上是一种数组对象,是以数组的形式存储的,可是它能够被视为一颗全然二叉树,因此又叫二叉堆。堆分为下面两种类型:大顶堆:父结点的值不小于其子结点的值,堆顶元素最大小顶堆:父结点的值不大于其子结点的值,堆顶元素最小堆排序的时间复杂度跟合并排序一样,都是O(nlgn),可是合并排序不是原地排序...
分类:
编程语言 时间:
2014-10-20 21:14:02
阅读次数:
239
堆排序,要从初始状态调整成大顶堆,然后每次取出顶(此时顶是最大的),用最后一个元素代替顶,再接着排序。#define LOCAL#include#include#includeusing namespace std;typedef int ElemType;const int maxSize=10;...
分类:
编程语言 时间:
2014-10-10 17:43:44
阅读次数:
199
HeapSort 原理:(堆排序是不稳定的)实现堆排序可以看成分为两个部分: 1.从一个无序堆建成一个大顶堆(假设我们要求从小到大排序) 2.在“输出”堆顶元素之后,调整剩余元素成为一个新的堆建立大顶堆方法: 从最后一个非叶子结点开始向前遍历,每一个遍历到的结点都和它的两个(或者一个)子结点中的最大...
分类:
编程语言 时间:
2014-10-10 00:01:37
阅读次数:
244
/*堆排序(大顶堆)2011.9.14*/#include#includeusingnamespacestd;voidHeapAdjust(int*a,inti,intsize)//调整堆{intlchild=2*i;//i的左孩子节点序号intrchild=2*i+1;//i的右孩子节点序号int...
分类:
其他好文 时间:
2014-09-01 00:24:22
阅读次数:
285
/*堆排序(大顶堆)2011.9.14*/#include#includeusingnamespacestd;voidHeapAdjust(int*a,inti,intsize)//调整堆{intlchild=2*i;//i的左孩子节点序号intrchild=2*i+1;//i的右孩子节点序号int...
分类:
其他好文 时间:
2014-08-31 18:28:11
阅读次数:
207
/*堆排序(大顶堆)2011.9.14*/#include#includeusingnamespacestd;voidHeapAdjust(int*a,inti,intsize)//调整堆{intlchild=2*i;//i的左孩子节点序号intrchild=2*i+1;//i的右孩子节点序号int...
分类:
其他好文 时间:
2014-08-29 19:42:38
阅读次数:
254