在学习堆排序之前首先了解一下二叉堆的特性: 1、二叉堆的父节点的值总是大于等于(或小于等于)其左右孩子的值; 2、每个节点的左右子树都是一棵这样的二叉堆。 如果该二叉堆的父节点总是大于孩子节点,则叫做最大堆,如果父节点小于孩子节点,则叫做最小堆。 在堆排序的应用中,如果递增排序,则应该使用最大堆,反 ...
分类:
编程语言 时间:
2017-07-29 15:16:37
阅读次数:
205
前言
在整理算法题的时候发现,大根堆(小根堆)这种数据结构在各类算法中应用比较广泛,典型的堆排序,以及利用大小根堆这种数据结构来找出一个解决问题的算法最优解。因此,我打算单独将关于堆的应用独立总结出来,后面每遇到一种跟堆结构相关的应用都放到这个目录下。
堆的定义
n个关键字序列L[1…n]称为堆,当且仅当该序列满足:
1. L(i)<=L(2i)且L(i)<=L(2i+1)或...
分类:
编程语言 时间:
2016-05-10 12:55:56
阅读次数:
670
我们举例,假若从10000万个数里选出前100个最大的数据。首先我们先分析:既然要选出前100个最大的数据,我们就建立一个大小为100的堆(建堆时就按找最大堆的规则建立,即每一个根节点都大于它的子女节点),然后再将后面的剩余数据若符合要求就插入堆中,不符合就直接丢弃该数..
分类:
编程语言 时间:
2016-04-27 07:04:04
阅读次数:
307
本文章用七种思路来查找无序数组中的前k个最小(最大)元素,复杂度随着问题的分析变得越来越低,思路也随着分析变得越来越的。贯穿讲解了快速排序和堆排序的应用,对这两种的排序在阅读本文后会有更深刻的理解。...
分类:
其他好文 时间:
2014-06-22 00:06:29
阅读次数:
347