堆排序算法就是通过维护一个小根堆或者大根堆的数据结构。小/大根堆本质上是一个完全二叉树。利用了完全二叉树的性质,即完全二叉树节点x的子节点编号为2x和2x+1。 利用这个性质,我们可以让一个一维数组来模拟这个二叉树,数组下标从1开始建立,下标为2*x和2*x+1的就是x的左子树和右子树。 #incl ...
分类:
编程语言 时间:
2020-02-08 17:57:21
阅读次数:
130
前言 二叉堆分为最大堆与最小堆,一组不规则的完全二叉树或者近完全二叉树,可以通过调整称为二叉堆。 序列化: 形成二叉堆通过下沉。 插入元素通过上浮。 排序: 二叉堆的最大堆为父节点一定大于或者等于子节点,堆顶一定最大。 如果最小堆的堆顶与最后一个元素交互,那么最后一个元素一定最大。 如果最后一个元素 ...
分类:
编程语言 时间:
2020-02-08 11:22:27
阅读次数:
77
Heap分为MaxHeap和MinHeap Heap均为完全二叉树 定义heap的结构 typedef struct{ int *Elements; //储存堆元素数据,假设储存数组 int Size; //堆当前元素个数 int MaxSize; //堆最大容量 }heap; 初始化heap的操作 ...
分类:
其他好文 时间:
2020-02-08 10:11:52
阅读次数:
94
题意: 输入一个正整数N(<=20),代表结点个数(0~N-1),接着输入N行每行包括每个结点的左右子结点,'-'表示无该子结点,输出是否是一颗完全二叉树,是的话输出最后一个子结点否则输出根节点。 trick: 用char输入子结点没有考虑两位数的结点😓。。。 stoi(x)可以将x转化为十进制整 ...
分类:
其他好文 时间:
2020-02-07 00:59:15
阅读次数:
72
什么是二叉堆 二叉堆本质是完全二叉树一种。分为最大堆和最小堆两种。 字面理解最大堆任何一个父节点的值都大于等于它左右孩子的值,最小堆则与之相反。 二叉堆的根节点叫做堆顶。最大堆的堆顶就是整个堆最大的数,最小堆则与之相反。 举个例子:最大堆 堆的操作 二叉堆的基本操作:插入,删除,查询。 1.插入 插 ...
分类:
其他好文 时间:
2020-02-06 21:33:03
阅读次数:
76
天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟 ...
分类:
编程语言 时间:
2020-02-05 17:56:57
阅读次数:
72
10种排序算法的Java实现 分类 基于比较的排序算法 冒泡排序,选择排序,插入排序,希尔排序,归并排序,快速排序,堆排序 非比较的排序算法 计数排序,桶排序,基数排序 稳定的排序算法 冒泡排序,插入排序,归并排序,计数排序,桶排序,计数排序 不稳定的排序算法 选择排序,希尔排序,快速排序,堆排序 ...
分类:
编程语言 时间:
2020-02-04 15:31:38
阅读次数:
69
二叉树的性质 1. $二叉树的每个节点最多只有 2 个子树 (不存在度 2 的节点) 有左右之分,不可以颠倒$ 2. $二叉树的第 i 层最多有 2^{i 1}个结点$ 3. $设二叉树的深度为 k 则: 二叉树最多有 2^{k} 1 个结点$ 4. $对任何一棵二叉树 T ,设其叶节点数为 n_{ ...
分类:
其他好文 时间:
2020-02-04 13:50:30
阅读次数:
71
堆的详细创建过程:参考:https://www.jianshu.com/p/21bef3fc3030 明白堆的详细创建过程的前提是要理解Shift Down。 但是这明显不符合最大堆的定义,所以我们需要让该完全二叉树转换成最大堆!怎么转换成一个最大堆呢? 最大堆有一个特点就是其各个子树都是一个最大堆 ...
分类:
其他好文 时间:
2020-02-02 19:38:51
阅读次数:
61
归纳 1.时间复杂度为o(n^2) 冒泡排序 选择排序 插入排序 希尔排序 2.时间复杂度为o(nlogn) 快速排序 归并排序 堆排序 3.时间复杂度为线性排序 计数排序 桶排序 基数排序 ...
分类:
编程语言 时间:
2020-02-02 11:33:32
阅读次数:
66