[算法说明]
堆排序是对简单选择排序的改进
简单选择排序是从n个记录中找出一个最小的记录,需要比较n-1次。但是这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较中,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执行了这些比较操作,因而记录的比较次数较多。
堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆...
分类:
编程语言 时间:
2015-03-12 22:35:02
阅读次数:
206
package?org.rev.algorithm;
/**
?*?堆排序,时间复杂度为O(nlogn),是利用堆的性质进行的一种选择排序。
?*?
?*?大顶堆是一个完全二叉树,所有的父节点都大于或等于它的左右子节点,即a[i]>=a[2i+1]&&a[...
分类:
编程语言 时间:
2015-02-02 16:14:38
阅读次数:
191
题目链接:
1105
一共两种操作 放入和取出(MAX)的
最多有10W次操作 ,暴力肯定会超时。
我们可以将盒子理解为一个大顶堆,即父节点大于左右子节点。
1.每次放入糖果时往上维护堆
2.取出时模仿堆排序的算法 将根节点(max)输出并与最后一个节点交换 再维护堆
代码:
#inclu...
分类:
其他好文 时间:
2015-01-27 11:20:47
阅读次数:
159
堆:堆是具有特殊性质的二叉树
每个结点都大于其左右儿子的的二叉树叫大顶堆
每个结点都小于其左右儿子的二叉树叫做小顶堆
堆排序图解:
给定一个整形数组a[]={16,7,3,20,17,8},对其进行堆排序。
首先根据该数组元素构建一个完全二叉树,得到
然后需要构造初始堆,则从最后一个非叶节点开始调整,调整过程如下:
20和...
分类:
编程语言 时间:
2015-01-26 22:55:08
阅读次数:
248
题意。
1000个case
每个case
输入若干个数,对第k个输入,如果k为奇数,则输出前k个数的中位数
那么这就是动态求中位数了
实现的思路也比较简洁
用两个堆, 大顶堆和小顶堆
每次输入一个数,如果这个数比当前的中位数大,就存入小顶堆中, 否则就存入大顶堆。
然后调整, 小顶堆元素的个数要等于大顶堆的元素个数,或者比其多1。
如果小顶堆的元素太多,就...
分类:
其他好文 时间:
2015-01-23 18:24:23
阅读次数:
125
完全二叉树 首先让我们回顾一下完全二叉树的两个性质: 性质1:具有n个结点的完全二叉树的深度为[logn](向下取整)+1。 性质2:若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点: (1) 若 i=1,则该结点是二叉树的根,无双亲,否则,编号为 [i/2](向下取整)的结点为其双亲结点; (2) 若 2i>n,...
分类:
编程语言 时间:
2015-01-13 21:40:06
阅读次数:
221
堆是一种完全二叉树,因此可以用数组来表示。给定节点下标i,1 #define PARENT(i) ((i) >> 1)2 3 #define LEFT(i) ((i) = A[i]堆排序的原理为:1、首先构建一棵大顶堆2、交换根节点和堆的最后一个节点,堆大小减一3、重复2,直达堆大小为1voi...
分类:
编程语言 时间:
2015-01-09 00:05:19
阅读次数:
196
题意:
有c有牛,从中选(n-1)/2头,使他们的得分中位数最大且需要的资金援助和不超过f.
分析:
堆的运用大顶堆维护最小和。
代码:
//poj 2010
//sep9
#include
#include
#include
using namespace std;
const int maxN=100024;
int dpl[maxN],dpr[maxN];
priority...
分类:
其他好文 时间:
2015-01-08 13:26:24
阅读次数:
184
(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。二叉堆可以分为两种形式:最大堆和最小堆。若将记录按从大到小排列,建“小”顶堆。若将记录按从小到大排,建“大”顶堆。说明:在堆排序算法中,我们使用的是最大堆,最小堆通常用于构造优先队列。算法分析:时间复杂度是O(nlogn)。堆排序属于原址排序:...
分类:
编程语言 时间:
2015-01-05 23:09:50
阅读次数:
390
堆排序是对简单选择排序算法的一种改进,在每次选择最小记录的同时,根据比较结果对其他记录做出相应的调整。堆是具有下列性质的完全二叉树:每个节点的值都大于(小于)或者等于其左右孩子节点的值,为大顶堆(小于)。堆排序的基本思想是:从最后一个含有叶子节点的节点开始将待排序列构造成一个堆,然后将堆顶元素与末尾...
分类:
编程语言 时间:
2014-12-23 10:10:55
阅读次数:
182