堆排序
来源:互联网 发布:如何做人力资源矩阵图 编辑:程序博客网 时间:2024/06/08 02:34
1.
堆又成为二叉堆,因为堆就是一棵二叉树(堆就是一种树),而且是一棵近似的完全二叉树
堆排序时间:O(nlgn)
堆排序是原址排序
原址排序:就是任何时候只需常数个额外的元素空间存储临时数据
堆排序同时具有插入排序和归并排序的优点
2.
算法设计技巧:引入堆这种数据结构来设计算法
A.length:数组的元素个数
A.heap-size:堆中的元素个数
只有A[1..A.heap-size]存的才是堆的元素
3.
三种结点计算
父节点:[i/2](向下取整,即截断) (将i右移1位,即可得到[i/2]的向下取整)
左孩子:2i (将i左移一位)
右孩子: 2i + 1 (将i左移一位,并在低位加1)
求左孩子、右孩子、父节点都可以用左移或右移操作,将i的值左移或右移一位(如果求右孩子要先左移一位再在低位加1),即可以快速求左孩子、右孩子及父节点
高度 = 杆数 层数 = 高度 + 1 最底层高度最小,为0
堆分为两种,最大堆和最小堆
最大堆:子结点的值最多和父节点一样大(小于等于父节点)
堆排序用的是最大堆,优先队列一般用最小堆
堆的高度:堆的高度就是根结点的高度
4.
堆有7种操作
①max-heapify(维护最大堆的性质) 时间O(lgn)
②build-max-heap(建堆):将一个无序数组建成最大堆 时间O(n)
③heapsort(堆排序):对一个数组进行原址排序 时间O(nlgn)
④max-heap-insert 时间O(lgn)
⑤heap-extract-max 时间O(lgn)
⑥heap-increase-key 时间O(lgn)
⑦heap-maximum 时间O(lgn)
④、⑤、⑥、⑦均为优先队列的操作
5.
定理1:一个堆的高度是theta(lgn)
定理2:堆上的一些基本操作时间最多与堆(树)的高度成正比,即时间为O(lgn)
定理3:高度为h的堆,最多可能有2^(h+1)-1个元素(当堆为完全二叉树时元素最多),最少可能有2^h个元素,因此当堆元素最多时,元素个数一定为一个奇数,最少元素一定为一个偶数
定理4:树的高度h<lgn,因此树高h=[lgn](向下取整)
堆又成为二叉堆,因为堆就是一棵二叉树(堆就是一种树),而且是一棵近似的完全二叉树
堆排序时间:O(nlgn)
堆排序是原址排序
原址排序:就是任何时候只需常数个额外的元素空间存储临时数据
堆排序同时具有插入排序和归并排序的优点
2.
算法设计技巧:引入堆这种数据结构来设计算法
A.length:数组的元素个数
A.heap-size:堆中的元素个数
只有A[1..A.heap-size]存的才是堆的元素
3.
三种结点计算
父节点:[i/2](向下取整,即截断) (将i右移1位,即可得到[i/2]的向下取整)
左孩子:2i (将i左移一位)
右孩子: 2i + 1 (将i左移一位,并在低位加1)
求左孩子、右孩子、父节点都可以用左移或右移操作,将i的值左移或右移一位(如果求右孩子要先左移一位再在低位加1),即可以快速求左孩子、右孩子及父节点
高度 = 杆数 层数 = 高度 + 1 最底层高度最小,为0
堆分为两种,最大堆和最小堆
最大堆:子结点的值最多和父节点一样大(小于等于父节点)
堆排序用的是最大堆,优先队列一般用最小堆
堆的高度:堆的高度就是根结点的高度
4.
堆有7种操作
①max-heapify(维护最大堆的性质) 时间O(lgn)
②build-max-heap(建堆):将一个无序数组建成最大堆 时间O(n)
③heapsort(堆排序):对一个数组进行原址排序 时间O(nlgn)
④max-heap-insert 时间O(lgn)
⑤heap-extract-max 时间O(lgn)
⑥heap-increase-key 时间O(lgn)
⑦heap-maximum 时间O(lgn)
④、⑤、⑥、⑦均为优先队列的操作
5.
定理1:一个堆的高度是theta(lgn)
定理2:堆上的一些基本操作时间最多与堆(树)的高度成正比,即时间为O(lgn)
定理3:高度为h的堆,最多可能有2^(h+1)-1个元素(当堆为完全二叉树时元素最多),最少可能有2^h个元素,因此当堆元素最多时,元素个数一定为一个奇数,最少元素一定为一个偶数
定理4:树的高度h<lgn,因此树高h=[lgn](向下取整)
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Android基础技术核心归纳(二)
- Java项目结构
- 归并排序 Java实现
- HTML开始---基础简介
- hibernate如何提高jdbc的性能
- 堆排序
- 一张图带你了解Android5.0中的colorPrimary、colorPrimaryDark、colorAccent
- 跨时钟域处理三大方法
- VMware12 和秘钥
- Spring Security#Expression-Based Access Control
- String编码源码解析
- 4-2 4-3 4-4 Gradient Descent for Multiple Variables
- Leetcode:Maximum Subarray
- 枚举工厂