小朋友学数据结构(11):堆排序 (一)什么是堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者 Key[i]>=Key[2i+1]&&key>=key[2i+2], 即任何一非叶节点的关键字不大于或者不小于其左右孩 ...
分类:
编程语言 时间:
2018-09-08 00:44:52
阅读次数:
205
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2018-09-07 14:19:09
阅读次数:
167
建堆的复杂度先考虑满二叉树,和计算完全二叉树的建堆复杂度一样。 对满二叉树而言,第 $i$ 层(根为第 $0$ 层)有 $2^i$ 个节点。 由于建堆过程自底向上,以交换作为主要操作,因此第i层任意节点在最不利情况下,需要经过 $(n i)$ 次交换操作才能完成以该节点为堆根节点的建堆过程。 因此, ...
分类:
其他好文 时间:
2018-08-31 14:04:48
阅读次数:
181
一.什么是堆? 把数组中的元素之间的关系用一种下标之间的数学关系组成完全二叉树的结构,这种结构偶是逻辑结构,物理结构还是数组 二 数组中元素怎么变为堆结构? 每个元素的下标的i(i-1》/2 为它的父节点位置,每个元素的左节点下标为 (i*2)+1 ,右节点下表为 (i*2)+2 比如给定一个数组 ...
分类:
编程语言 时间:
2018-08-30 15:44:24
阅读次数:
149
1. 二叉树的遍历:先序(递归、非递归),中序(递归、非递归),后序(递归、非递归)。 2. 获取二叉树节点个数: 3. 判断二叉树是否为完全二叉树: 4. 求二叉树两个节点的最小公共祖先: 5. 二叉树的翻转: 6. 求二叉树第k层的节点个数: 7. 求二叉树中节点的最大距离(相距最远的两个节点之 ...
分类:
编程语言 时间:
2018-08-28 17:57:22
阅读次数:
179
二叉树:每个结点至多有两个子树 满二叉树:每一层的结点个数都是最大结点数 完全二叉树:叶子节点在最后两层;对于任一结点,左子树的深度比右子树深度大1或者相等 性质: 二叉树:第i层,至多有2^(i-1)个结点 二叉树:深度为k的二叉树,至多有(2^k)-1个结点 满二叉树:深度为k的满二叉树的结点个 ...
分类:
其他好文 时间:
2018-08-27 23:17:05
阅读次数:
200
堆(优先队列)priority queue特殊的队列,取出元素的顺序是依照元素的优先权(关键字)大小,而出元素进入队列的先后顺序操作:查找最大值(最小值),删除(最大值) 数组:链表:有序数组:有序链表: 采用二叉搜索树? NO 采用完全二叉树 YES堆的连个特性结构性:用数组表示的完全二叉树:有序 ...
分类:
其他好文 时间:
2018-08-24 00:36:36
阅读次数:
528
思路:通过树的层序遍历进行判断。结点入队时,当出现一个结点的孩子结点为空时,则之后就不能有新的结点入队。 若没有,则是完全二叉树,否则不是完全二叉树。 层序遍历代码: ...
分类:
其他好文 时间:
2018-08-20 19:44:55
阅读次数:
158
二叉树的定义:二叉树是每个结点最多有两个子树的树结构。性质:1、在二叉树的第i层上至多有2^i-1个结点。(i>=1) 2、深度为k的二叉树至多有(2^k)-1个结点。(k>=1) 3、具有n个结点的完全二叉树的深度为(log2n)+1。 &
分类:
其他好文 时间:
2018-08-13 16:58:53
阅读次数:
138
文字描述 1 二叉树的顺序存储 用一组地址连续的存储单元自上而下,自左至右存储完全二叉树上的结点元素。 这种顺序存储只适用于完全二叉树。因为,在最坏情况下,一个深度为k且只有k个结点的单支树却需要长度为2k-1的一维数组。 2 二叉树的链式存储(二叉链表): 链表中的结点至少包含3个域:数据域,左指 ...
分类:
其他好文 时间:
2018-08-07 20:28:39
阅读次数:
181