堆排(Heap Sort)


1、概念

完全二叉树特点:

对于完全二叉树中任一点 i:

  • 左孩子的位置为: 2i
  • 右孩子的位置为:2i+1
  • 父节点位置为:i/2 向下取整

最小二叉堆:根节点的值小于子树的任一元素,对于子树也一样。

堆排实现:最小二叉堆,优先队列


2、插入元素

原理:在末尾插入,根据大小关系进行调整。

插入14:

复杂度:

  • 插入一个元素平均比较次数为2.607,移动1.607层。
  • 一次插入复杂度为平均为O(1),最差为O(logN)。

3、删除最小元素

原理:删除根节点,其它元素依次向上补空。

删除:


复杂度: O(logN)


4、排序

时间复杂度为O(N logN)

  1. 逐个插入,建立二叉堆,O(N)
  2. 依次删除最小元素,O(N logN)
  3. 删除的元素依次存入新的数组,即得到升序数组

数据结构与算法(C++)– 堆排(Heap Sort)相关推荐

  1. 【数据结构与算法】堆

    一:如何理解"堆" 1,堆是一个完全二叉树: 完全二叉树要求除了最后一层,其他层的节点都是满的,最后一层的节点都靠左排列. 2,堆中每个节点都必须大于等于(或小于等于)其子树中每个 ...

  2. 【数据结构与算法】快排、归并 O(nlogn) 基于比较

    冒泡.插入.选择 O(n^2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.分治思想 1.分治思想:分治,顾明思意,就是分而治之,将一个大问题分解成小的 ...

  3. 数据结构与算法之堆与堆排序

    在数据结构中,堆其实就是一棵完全二叉树.我们知道内存中也有一块叫做堆的存储区域,但是这与数据结构中的堆是完全不同的概念.在数据结构中,堆分为大根堆和小根堆,大根堆就是根结点的关键字大于等于任一个子节点 ...

  4. Java数据结构与算法:堆

    1. 堆的定义 设有n个数据元素的关键字为(k0.k1.-.kn-1),如果它们满足以下的关系:ki<= k2i+1且ki<= k2i+2(或ki>= k2i+1且ki>= k ...

  5. 数据结构排序算法——交换排序(冒泡排序Bubble Sort)

    一.算法简介: 每一趟只能确定将一个数归位.即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去.如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n- ...

  6. C语言实现heap sort堆排序的算法(附完整源码)

    C语言实现heap sort堆排序的算法 C语言实现heap sort堆排序的算法完整源码(定义,实现,main函数测试) C语言实现heap sort堆排序的算法完整源码(定义,实现,main函数测 ...

  7. 【数据结构和算法16】堆排序

    堆排序,顾名思义就是利用堆这个数据结构对数据项进行排序.前面提到过.堆数据结构中.节点大于或等于自己的子节点.那么我们能够将待排序的数据项依次加入到堆中,然后再依次取出根节点就可以.从堆中取出的数据项 ...

  8. python数据结构与算法13_python 数据结构与算法 (13)

    python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...

  9. 数据结构排序算法 内部排序(冒泡、鸡尾酒、选择、简单插入、二分插入、快排、希尔、归并、堆排)C语言实现

    文章目录 排序 冒泡排序 鸡尾酒排序 选择排序: 简单插入排序: 二分插入排序 快速排序: 希尔排序: 归并排序: 堆排序: 排序 点击以下图片查看大图: 冒泡排序 1.比较相邻的元素,如果前一个比后 ...

最新文章

  1. 推荐几份能够帮助你学习 CSS3 的实用帮助手册
  2. html用css画多边形,Sass绘制多边形_Preprocessor, Sass, SCSS, clip-path, CSS处理器, 会员专栏 教程_W3cplus...
  3. java包命名规则名词_java中命名规范
  4. 【Mac】tar 打包指定目录并排除某些目录或文件
  5. 从Encoder到Decoder实现Seq2Seq模型
  6. java中各种时间格式的转化
  7. java future用法_你必须掌握的 21 个 Java 核心技术
  8. Dubbo 分布式事务一致性实现
  9. 高位在前和低位在前区别_前、后级功放、合并功放区别是什么?
  10. python while快速写法_从零开始学Python,带你手把手实战之一
  11. 单片机万年历阴阳历c语言,单片机 阴历阳历c算法 万年历
  12. 调戏微软文言文AI翻译:“永不舍汝”、“其母之”是什么鬼???
  13. java float 输出文本框_关于Java中float数输出时显示问题
  14. aquarius数据库建模配置详解
  15. Quality-Estimation0 (翻译质量评价-使用 BERT 特征训练 QE 模型)
  16. 静态库与动态库的区别(转)
  17. php函数的,php函数
  18. PHM寿命预测内容定稿
  19. java如何给密码加密_Java如何实现密码加密
  20. softmax分类器推导

热门文章

  1. Django restful framework之 rest接口设计规范
  2. mysql五种日期函数
  3. 去除导航栏的背景色和底部1像素黑色线条or隐藏导航栏
  4. https 页面中引入 http 资源的解决方式
  5. 网页设计界面 电脑版设计
  6. HDU5593 ZYB's Tree 树形DP +分治
  7. Android 应用间的集成
  8. MyCP(课下作业,必做)
  9. 2017.10.3北京清北综合强化班DAY3
  10. css中小知识点总结