码迷,mamicode.com
首页 >  
搜索关键字:最大堆    ( 518个结果
【数据结构】找出N个数据中最大的前k个数据(利用堆排序)
我们举例,假若从10000万个数里选出前100个最大的数据。首先我们先分析:既然要选出前100个最大的数据,我们就建立一个大小为100的堆(建堆时就按找最大堆的规则建立,即每一个根节点都大于它的子女节点),然后再将后面的剩余数据若符合要求就插入堆中,不符合就直接丢弃该数..
分类:编程语言   时间:2016-04-27 07:04:04    阅读次数:307
数据结构--二叉堆与堆排序
二叉堆的概念 二叉堆,BinaryHeap,是二叉树中的常见的一种结构。通常以最大堆和最小堆的形式呈现。最大堆指的是父节点大于等于孩子节点的value值,也就是说对于最大堆而言,根元素是二叉堆最大的元素。最小堆的概念是与最大堆的概念是相似的。...
分类:编程语言   时间:2016-04-26 21:19:07    阅读次数:215
堆排序总结
堆排序 概念: 第一个非叶子节点: 小于size/2的部分; 非叶子节点的区间: [0, size/2); (注意是左闭右开) 最大堆:满足父节点head, arr[head]<=arr[2*head+1] && arr[head]<=arr[2*head+2] 非叶子节点的子树才需要调整(没有子节 ...
分类:编程语言   时间:2016-04-24 14:14:40    阅读次数:254
【数据结构】堆的实现(包括:默认成员函数,插元素push,删元素pop,访问根节点top,判空,大小)
在数据结构里,堆是一类很重要的结构。堆结构是一组数组对象,我们可以把它当作是一颗完全二叉树。最大堆:堆里每一个父亲节点大于它的子女节点。最小堆:堆里每一个父亲节点小于它的子女节点。如图就是一个最大堆:实现代码时我的测试序列是:inta[]={10,11,13,12,16,18,15,17,..
分类:其他好文   时间:2016-04-23 23:14:02    阅读次数:716
【数据结构】堆的实现以及简单的函数
堆是什么?刚接触到这个概念估计都摸不着头脑,不知道堆是什么样个东西。简单介绍下,堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。堆结构的二叉树存储有两种情况:(1).最大堆:每个父节点的都大于孩子节点。(2).最小堆:每个父节点的都小于孩子节点。举个例子..
分类:其他好文   时间:2016-04-23 23:09:57    阅读次数:246
经典排序算法系列7----堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。 二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。 当父结点的键值总...
分类:编程语言   时间:2016-04-22 19:40:49    阅读次数:188
数据结构杂谈(三)堆排序
堆 用数组存储一个堆,看成一个近似的完全二叉树。堆有自己的尺寸(不一定与数组长度相同)。 堆的性质:父结点比儿子结点大是最大堆;父节点比儿子节点小是最小堆。 本文以最大堆为例。 对于一个结点i,其父结点标号是i/2向下取整,左子结点是2*i,右子结点是2*i+1。 堆的高度是log(n)。 堆排序的 ...
分类:编程语言   时间:2016-04-18 17:13:58    阅读次数:378
堆排序
1、堆的定义 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]=Key[2i+1]&&key>=key[2i+2]。在最大堆中,最大元素放在根节点中,且对任一非根节点,它的值小于或等于其双亲节点值。最小对则相反,根节点是最小元素。2、堆排序的思想 利用最大堆(最小堆)堆顶记录的是最大关键字(最小...
分类:编程语言   时间:2016-04-18 13:46:30    阅读次数:164
最小(大)堆找出数组的最小(大)的k项值
其中a是数组,b代表数组的下标。最后printf处如果输出a[0]就是数组最小的k项,输出b[0]就是数组最小k项的下标。b看需要可加可删 另外最大堆在:http://blog.chinaunix.net/uid-20937170-id-3347493.html ...
分类:编程语言   时间:2016-04-11 20:52:47    阅读次数:197
堆排序的基本实现
voidAdjustHeap(int*a,intsize,introot)//建最大堆{ if(a==NULL) { return; } intchild=root*2+1; while(child<size) { if((child+1)<size&&a[child]<a[child+1]) { ++child; } if(a[root]<a[child]) { swap(a[child],a[root]); } root=child;..
分类:编程语言   时间:2016-04-07 01:39:03    阅读次数:178
518条   上一页 1 ... 31 32 33 34 35 ... 52 下一页
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!