Python实现堆 堆 堆是一种完全二叉树(当一个高度为 h 的完美二叉树减少到 h 1,并且最底层的槽被毫无间隙地从左到右填充,我们就叫它完全二叉树),有最大堆和最小堆两种 最大堆: 对于每个非叶子节点 V,V 的值都比它的两个孩子大,称为 最大堆特性(heap order property) 最 ...
分类:
编程语言 时间:
2020-04-27 15:06:28
阅读次数:
47
堆,一种非常重要的数据结构。能实现数据的自动排序,而且排序时间复杂度为O(nlogn),在n达到10^4时,O(n2)级算法就容易超时,但堆排序不会。堆可调用STL系统函数,简化代码,容易书写。一般情况,如果堆元素为数、字符、字符串都可有用默认的排序规则。如果元素是pair类型,其比较大小的方式为先 ...
分类:
其他好文 时间:
2020-04-26 01:37:44
阅读次数:
78
树的实际应用 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序属于选择排序,其最好、最坏、平均时间复杂度均为 O(nlogn) ,他也是 不稳定排序 1. 堆介绍及最大最小堆 堆是具有以下性质的完全二叉树 每个结点的值都大于或等于其左右孩子结点的值,称为大项堆 每个结点的值都小于等于其 ...
分类:
编程语言 时间:
2020-04-24 20:06:27
阅读次数:
68
本质上是一种完全二叉树 分为两个类型: 1.最大堆: 所有父节点的值都大于左右孩子节点的值 2.最小堆:所有父节点的值都小于左右孩子节点的值 二叉堆根节点叫堆顶 1.二叉堆的自我调整 自我调整就是把不符合堆性质的完全二叉树调整成一个堆。 1.插入节点(最小堆举例) 插入时insert到最后一个节点 ...
分类:
其他好文 时间:
2020-04-24 18:44:14
阅读次数:
51
一、物理结构和概念结构 学习堆必须明确,堆有两个结构,一个是真实存在的物理结构,一个是有助于理解的概念结构。 1. 堆一般由数组实现,但是我们平时在理解堆的时候,会把他构建成一个完全二叉树结构。堆分为大根堆和小根堆:大根堆,就是这颗树里的每一个结点都是以它为根结点的树中的最大值;小根堆则与之相反。 ...
分类:
编程语言 时间:
2020-04-23 19:35:27
阅读次数:
79
1、二叉树:任意一个结点的子结点个数最多两个,且子结点的位置不可更改,二叉树的子树有左右之分。 1)分类:(1)一般二叉树(2)满二叉树:在不增加树的层数的前提下,无法再多添加一个结点的二叉树就是满二叉树。(3)完全二叉树:如果只是删除了满二叉树最底层最右边的连续的若干个结点,这样形成的二叉树就是完 ...
分类:
编程语言 时间:
2020-04-23 17:34:51
阅读次数:
113
二叉树 二叉树的性质 每个节点最多都有两个子节点的树称为二叉树。其性质与定义有: 第$i$层最多有$2^{i 1}$个节点 满二叉树:若每一层的节点数都是满的(都为$2^{i 1}$),则为满二叉树 完全二叉树:一棵满二叉树只在最后一层有缺失,则称为完全二叉树 而对于完全二叉树,它的子节点与父结点还 ...
分类:
其他好文 时间:
2020-04-23 15:06:58
阅读次数:
51
在经典堆排序算法中直接用fixDown操作。for循环构造堆,然后while循环把最大元素和最末尾的元素互换并且修复堆,直到堆为空为止。 堆排序比快速排序慢,但比归并排序快,而且不需要额外的储存空间,且运行时间对输入并不是特别敏感。 1 template <class Item> 2 void he ...
分类:
编程语言 时间:
2020-04-22 23:00:39
阅读次数:
110
什么是堆 1.所有 父节点 的值 都大于 (小于)子节点 的 值 2.属于完全 二叉树 堆排序思路 1.先定义一个调整堆的函数, 保证以 某点为 父节点进行调整, 并且保证 不 打乱 子节点 以下的 子树的 堆结构 , 所以 用到 递归思想 2.从头遍历 到 树尾, 先进行 首尾交换, 再进行 构建 ...
分类:
编程语言 时间:
2020-04-21 09:31:21
阅读次数:
81
插入排序 直接插入排序,折半插入排序,2-路插入排序,希尔排序 快速排序 冒泡排序,快速排序(冒泡排序改进), 选择排序 简单选择排序,树形选择排序,堆排序 归并排序 基数排序 ...
分类:
编程语言 时间:
2020-04-20 13:41:41
阅读次数:
63