实现堆排序需要解决两个问题:1、如何将n个待排序的数建成堆2、输出堆顶元素之后。如何调整剩余n-1个元素,使其成为一个新堆使用最大堆来进行堆排序算法实现,所谓堆排序就是每次交换堆顶元素与堆中最后一个元素,然后对前面的堆中的元素从堆顶开始调整。具体代码如下: 1 #include 2 3 usin.....
分类:
编程语言 时间:
2016-01-20 18:44:51
阅读次数:
151
最大堆:make_heap(vi.begin(),vi.end())#include #include #include using namespace std;int main(){ int ia[9] = {0, 1, 2, 3, 4, 8, 9, 3, 5}; make_heap(...
分类:
其他好文 时间:
2016-01-15 22:39:21
阅读次数:
182
该题的经典做法是,维护一个最大堆和一个最小堆。最大堆存的是截至目前为止较小的那一半数,最小堆存放的是截至目前为止较大的那一半数,这样中位数只有可能是堆顶或者两个堆顶所对应两个数的平均值。...
分类:
其他好文 时间:
2016-01-15 00:00:16
阅读次数:
414
一个裸的优先级队列(最大堆)题,但也有其他普通队列的做法。这道题我做了两天,结果发现是输入输出太过频繁,一直只能A掉55%的数据,其他都是TLE,如果将输入输出的数据放入缓存区,然后满区输出,可以将IO时间消耗降到很低。
分类:
其他好文 时间:
2016-01-01 14:54:06
阅读次数:
889
继上篇文章讲到堆的实现之后http://blog.csdn.net/tuke_tuke/article/details/50357939,下面可以使用堆来实现堆排序。
在堆的基础上实现堆排序的思路很简单:(这里使用最小堆,当然最大堆也可以)
最小堆MinHeap就是最小的数在堆的根元素的位置。首先把一组数建堆,然后再不断的移除堆的根元素,由于每次移除的根元素都是现有堆的最小元素,故可得到...
分类:
编程语言 时间:
2015-12-21 16:20:39
阅读次数:
179
堆本质是一棵二叉树,其中所有的元素都可以按全序语义进行比较。用 堆来进行存储需要符合以下规则:
1.元素可比较性:数据集中的元素可以进行比较,就是要实现Comparable接口;。
2.节点最大/最小性:每个节点的元素必须大于或小于该节点的孩子节点的元素;
3.堆是一棵完全二叉树。
堆有两种:最大堆和最小堆。
最小堆中每个节点的优先级小于或者等于它的子节点;最大堆则相反,每个节点...
分类:
其他好文 时间:
2015-12-19 15:09:21
阅读次数:
327
堆排序利用到完全二叉树的有关知识,时间复杂度O(nlogn)#include#include#include#includeusing namespace std;const int MAX_A = 100009;//使1到n元素为最大堆void Adjust(int a[],int i,int n...
分类:
编程语言 时间:
2015-12-14 20:58:06
阅读次数:
143
堆排序 不仅在排序上有较好的时间复杂度,同时最大堆,最小堆在解决top10等问题上有很好的效果。最大堆性质,除了根以为的所有结点i都要满足: A[parent(i)]>=A[i]即,子节点一定小于等于父节点,且任意子树也满足该性质。Max-Heapify是维持最大堆性质的关键。时间复杂度O(lg.....
分类:
编程语言 时间:
2015-12-12 00:03:19
阅读次数:
199
1、堆设置 JVM中最大堆大小有三方面限制:操作系统位数(32-bt还是64-bit)限制;可用虚拟内存限制;系统的可用物理内存限制。java-Xmx3550m -Xms3550m -Xmn2g–Xss128k(设置xmn大小)-Xmx3550m:设置JVM最大可用内存为3550M。-Xms355....
分类:
其他好文 时间:
2015-12-08 18:24:12
阅读次数:
173
思想:1.构建最大堆2.把根节点和最后一个节点交换,,把堆长度-1,也就不考虑放最后的最大的元素了,再构建最大堆3.现在第二大的元素在根节点了,我们再重复步骤2,直到堆长度为1int MaxHeap(int DataArray[],int Father,int DataLen){ int Le...
分类:
编程语言 时间:
2015-11-29 15:01:16
阅读次数:
155