数据结构--堆
无心流泪
这个作者很懒,什么都没留下…
展开
-
uestc oj 1830 Cookies Test
Cookies Test 这个题目动态维护一个大顶堆和一个小顶堆就可以解决了,其实主要目的就是动态的查询删除再查询一串数的中位数而已。 思路如下: 对于给定的一串数,均分成两部分(左右两堆,左边=num/2 右边=num/2+num%2)这样的话如果满足左边的都比中位数小,右边的都比中位数大,那么右边最小数就是中位数。那么左边建立一个大顶堆 右边建立一个小顶堆原创 2013-06-08 01:44:43 · 954 阅读 · 0 评论 -
堆排序
#include #include#includeusing namespace std;// 构造大顶堆// a 是要进行调整的堆数组 i是从第i个元素开始调整(其实就是最靠后的一个不是叶子节点的节点)// size是要进行调整的对数组的元素个数 用于确定在往下递归的时候不越界// 这是在调整堆的时候的单独调用模块就是 调整单个节点的模块void heapAdjust原创 2013-10-02 15:58:25 · 766 阅读 · 0 评论 -
支持动态维护的堆排序
#include #include#includeusing namespace std;//动态的维护一个大顶堆 支持 添加数据 和删除堆顶数据 并且总保持有序状态//数组从a[1] 开始void addAdjust(int *a,int size){ int id = size; while(id!=0&&a[id]>a[id/2]) {原创 2013-10-02 16:34:01 · 1065 阅读 · 0 评论 -
堆排序简介及其实现
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素起源堆排序[1]1991年计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法( Heap Sort )2定义原创 2013-10-03 10:36:02 · 988 阅读 · 0 评论 -
白话经典算法系列之七 堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总转载 2013-10-03 11:25:13 · 759 阅读 · 0 评论 -
实现堆的各种操作
#include//实现堆的各种操作 加入数据 删除数据 调整堆 获取数据//为方便编程 数组从1开始 小顶堆int a[100];int size = 0;int c,b;void swap(int *a,int *b){ int temp = *a; *a = *b; *b = temp;}void addAdjust(int a[],int s原创 2013-10-03 15:52:54 · 841 阅读 · 0 评论 -
UESTC OJ 1830 Cookies Test
http://www.cnblogs.com/easymath3/archive/2013/05/01/3052944.html#include #include #include #include #include #include #include using namespace std;priority_queue , less > lHeap;priority_qu转载 2013-12-08 23:44:20 · 937 阅读 · 0 评论