数据结构与算法(C++)– 堆排(Heap Sort)
堆排(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)
- 逐个插入,建立二叉堆,O(N)
- 依次删除最小元素,O(N logN)
- 删除的元素依次存入新的数组,即得到升序数组
数据结构与算法(C++)– 堆排(Heap Sort)相关推荐
- 【数据结构与算法】堆
一:如何理解"堆" 1,堆是一个完全二叉树: 完全二叉树要求除了最后一层,其他层的节点都是满的,最后一层的节点都靠左排列. 2,堆中每个节点都必须大于等于(或小于等于)其子树中每个 ...
- 【数据结构与算法】快排、归并 O(nlogn) 基于比较
冒泡.插入.选择 O(n^2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.分治思想 1.分治思想:分治,顾明思意,就是分而治之,将一个大问题分解成小的 ...
- 数据结构与算法之堆与堆排序
在数据结构中,堆其实就是一棵完全二叉树.我们知道内存中也有一块叫做堆的存储区域,但是这与数据结构中的堆是完全不同的概念.在数据结构中,堆分为大根堆和小根堆,大根堆就是根结点的关键字大于等于任一个子节点 ...
- Java数据结构与算法:堆
1. 堆的定义 设有n个数据元素的关键字为(k0.k1.-.kn-1),如果它们满足以下的关系:ki<= k2i+1且ki<= k2i+2(或ki>= k2i+1且ki>= k ...
- 数据结构排序算法——交换排序(冒泡排序Bubble Sort)
一.算法简介: 每一趟只能确定将一个数归位.即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去.如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n- ...
- C语言实现heap sort堆排序的算法(附完整源码)
C语言实现heap sort堆排序的算法 C语言实现heap sort堆排序的算法完整源码(定义,实现,main函数测试) C语言实现heap sort堆排序的算法完整源码(定义,实现,main函数测 ...
- 【数据结构和算法16】堆排序
堆排序,顾名思义就是利用堆这个数据结构对数据项进行排序.前面提到过.堆数据结构中.节点大于或等于自己的子节点.那么我们能够将待排序的数据项依次加入到堆中,然后再依次取出根节点就可以.从堆中取出的数据项 ...
- python数据结构与算法13_python 数据结构与算法 (13)
python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...
- 数据结构排序算法 内部排序(冒泡、鸡尾酒、选择、简单插入、二分插入、快排、希尔、归并、堆排)C语言实现
文章目录 排序 冒泡排序 鸡尾酒排序 选择排序: 简单插入排序: 二分插入排序 快速排序: 希尔排序: 归并排序: 堆排序: 排序 点击以下图片查看大图: 冒泡排序 1.比较相邻的元素,如果前一个比后 ...
最新文章
- 推荐几份能够帮助你学习 CSS3 的实用帮助手册
- html用css画多边形,Sass绘制多边形_Preprocessor, Sass, SCSS, clip-path, CSS处理器, 会员专栏 教程_W3cplus...
- java包命名规则名词_java中命名规范
- 【Mac】tar 打包指定目录并排除某些目录或文件
- 从Encoder到Decoder实现Seq2Seq模型
- java中各种时间格式的转化
- java future用法_你必须掌握的 21 个 Java 核心技术
- Dubbo 分布式事务一致性实现
- 高位在前和低位在前区别_前、后级功放、合并功放区别是什么?
- python while快速写法_从零开始学Python,带你手把手实战之一
- 单片机万年历阴阳历c语言,单片机 阴历阳历c算法 万年历
- 调戏微软文言文AI翻译:“永不舍汝”、“其母之”是什么鬼???
- java float 输出文本框_关于Java中float数输出时显示问题
- aquarius数据库建模配置详解
- Quality-Estimation0 (翻译质量评价-使用 BERT 特征训练 QE 模型)
- 静态库与动态库的区别(转)
- php函数的,php函数
- PHM寿命预测内容定稿
- java如何给密码加密_Java如何实现密码加密
- softmax分类器推导