# 算法学习笔记之二(堆排序)
堆其实是一个数组,它可以看成一个二叉树,用来储存数组里的元素。
![](https://box.kancloud.cn/457631f2923581c150b3dac554162d6b_525x196.png)
其中10为根结点,25,30,70为叶结点,其余称为结点。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。一个结点的高度就是从结点到叶节点的最长路径,一个堆的高度就是根节点的高度。含n个元素的堆高度是floor[log2(n)].
堆排序利用的是最大堆的性质。
~~~
Parent(i)//返回一个结点的父结点
returnfloor[i/2]
Left(i)//返回一个结点的左子节点
return 2*i
Right(i) //返回一个结点的右子节点
return 2*i+1
Max_Heapify(i)//维护以i为结点的子树的最大堆性质
l=Left(i)
r=Right(i)
if l<=A.heap-size and A[l]>A[i]
large=l
else
large=i
if r<= A.heap-size and A[r]>A[larget]
larget=r
if larget !=i
exchanceA[i] with A[larget]
Maax_Heapify(A.larget)
Build_Max_Heapify(A)//建立一个堆
A.heap-size=A.length
For i=floor[A.length/2] downto 2
Max_Heapify(A,i)
HeapSort(A)//每一次提取根节点的值,也就是最大值,然后重新建立最大堆
Build_Max_Heapify(A)
for i=A.length downto 2
ExchanceA[1] with A[i]
A. heap-size =A.heap-size-1
Max_Heapify(A,1)
~~~
堆排序的时间复杂度也是O(n*log2(n))
虽然堆排序不是最优,但是其堆的结构却很能引发我们的思考,比如用堆结构可以实现优先队列;接下来就是学习优先队列了。
- 我的笔记
- 服务器
- ubuntu svn 环境的搭建
- ubuntu Memcache 的配置
- ubuntu 密钥登录服务器
- centos 搭建服务器环境
- nginx+tomcat 集群搭建
- 餐厅运营来看如何构建高性能服务器
- VMware-Centos-网络配置
- Ubuntu-PHP-Apache-Mysql-PhpMyadmin的搭建
- UbuntuApache配置日志
- linux获取当前执行脚本的目录
- Ubuntu svn的快速配置(原创)
- Https配置
- Mysql 不支持远程连接解决方案
- ubuntu+apache+rewrite
- php Mcrypt 扩展
- 重启Apache出现警告信息Could not reliably determine the server's fully qualified domain name,
- Mysql无法远程连接
- 定时任务设置
- Linux中Cache内存占用过高解决办法
- Ubuntu14-04安装redis和php5-redis扩展
- php
- thinkphp3.2 一站多城市配置
- PHP 安全编程建议(转)
- phpexcel导入时间处理
- Mysql按时,天,月,年统计数据
- PHP-支付宝-APP支付
- 百度爬虫-获取全国数据
- PHPEXCEL导入导出excel文件
- php-微信app支付后端设计
- Phpqrcode生成二维码
- 图片+文字水印
- 数据库优化
- java
- Mybatis 二级缓存
- 微信
- 微信公众号多域名授权
- 微信扫码支付
- web
- 网站性能优化方案实施
- ionic环境搭建
- 登录设计方案
- 设置dev元素的宽高比例
- 设计模式
- app
- 版本更新
- 微擎数据库操作扩展
- select
- find
- delete
- update
- insert
- where
- order
- page
- group
- having
- limit
- fields
- debug
- bind
- join
- alias
- query
- 聚合函数
- count
- sum
- max
- min
- avg
- 事务管理
- 自增自减
- 算法设计
- ACM:入口的选择------深度优先搜索
- java:N的N次方
- 最少拦截系统:贪心思想
- ACM:蚕宝宝:搜索
- ACM:n!的位数 :斯特林公式
- 神奇的异或
- 中国剩余定理
- 矩阵翻硬币
- 回溯法
- ACM程序设计网站集锦
- 博弈论
- 多维空间上的搜索算法
- 算法学习笔记之一(排序)
- 算法学习笔记之二(堆排序)
- 算法学习笔记之三(快速排序)
- ACM俱乐部密码
- 原创开源
- 个人感悟