【数据结构系列】堆与堆排序
来源:互联网 发布:学java的条件 编辑:程序博客网 时间:2024/06/03 19:18
- 堆的概念
堆是一种特殊的树结构,通常将按照一定顺序排列好的树结构称之为堆。
百度百科中的介绍如下:
堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。
堆总是满足下列性质:
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。
常见的堆有二叉堆、斐波那契堆等。
堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4...n/2)
若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,
则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。
若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。
1、堆的数组化
按照树的广度优先顺序进行排列,得到一个一维数组 A[n].
下标为i的节点对应的父节点为 A[(i-1)/2] ,对应左右子节点分别为 A[(i*2)+1]、A[(i*2)+2]。
2、堆节点的插入
插入到数组的最后一项,然后和其父节点进行比较,并做出相应的交换。同时更新整个堆的排序。
3、对节点的删除
总是删除根节点,并将数组的最后一个元素替换根节点,此时同步更新整个堆的排序。
4、堆排序
对于构造完成的最小堆数组,不断取出根节点后删除根节点,直到数组中没有其他元素。取出的数的序列即为排好序的序列。
5、堆排序的时间复杂度:O(N*logN)
更多信息请查看本人的个人网站:http://andersonlu.github.io/ProgrammingSky/
0 0
- 【数据结构系列】堆与堆排序
- 【数据结构】堆与堆排序
- 数据结构与算法:堆与堆排序
- 数据结构与算法-堆与堆排序
- 数据结构基础(19) --堆与堆排序
- 数据结构基础(19) --堆与堆排序
- 【数据结构学习】-堆与堆排序
- 数据结构--二叉堆与堆排序
- java数据结构 堆与堆排序
- 【数据结构与算法】堆排序
- 堆排序 | 数据结构与算法
- 【数据结构与算法】堆排序
- 数据结构+算法系列四:I 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- UITableView使用<2>UITableViewCell的介绍
- 白话空间统计十六:增量空间自相关
- Socket Http Tcp/ip的区别
- Rust - Arrays and Vectors | 数组和向量
- volatile代码中的应用
- 【数据结构系列】堆与堆排序
- 视图控制器ViewController的生命周期
- struct 中的宏定义--没有作用域,只是为了逻辑上理解,和放在外部是一样的
- netbean的安装及jdk安装和环境变量设置
- 十进制转二进制、十六进制
- 【1】基于TQ2440的MP3设计——【6、构建根文件系统】
- Android开发笔记——从SD卡保存和读取文件
- centos yum源使用整理以及安装国内yum源
- Android 中涉及的设计模式