前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法:堆排序(HeapSort)

算法:堆排序(HeapSort)

作者头像
WEBJ2EE
发布2019-07-19 14:53:05
4880
发布2019-07-19 14:53:05
举报
文章被收录于专栏:WebJ2EEWebJ2EE

1. 堆排序 ?

堆排序(HeapSort)是指利用堆(Heap)这种数据结构所设计的一种排序算法,它是选择排序的一种。

  • 堆(Heap)是一个完全二叉树
  • 完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树为完全二叉树。

图1:完全二叉树

  • 堆(Heap)可以分为大根堆小根堆
  • 大根堆:一棵完全二叉树,满足任一节点都比其孩子节点大;
  • 小根堆:一棵完全二叉树,满足任一节点都比其孩子节点小;

图2:大根堆

图3:小根堆

2. 基本流程 ?

堆排序的核心就构造堆、调整堆:

  1. 建立大顶堆堆(此时堆顶即为最大元素)
  2. 去掉堆顶,将堆最后一个元素放到堆顶;
  3. 调整堆,重新使堆有序;
  4. 堆顶元素为第二大元素。 重复步骤2、3,直到堆变空。

图4:排序前

图5: 调整堆

3. 程序代码 ?

图:堆排序代码

4. 算法总结?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebJ2EE 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档