教材学习内容总结 第 十二 章 优先队列与堆 一、堆:具有两个附加属性的一颗二叉树 它是一颗完全树 对每一结点,它小于或等于其左右孩子(或大于等于其左右孩子) 最小堆:对每一结点,它小于或等于其左右孩子 最大堆:对每一结点,它大于或等于其左右孩子 最小堆将其最小元素存储在二叉树的根处,且其根的两个孩 ...
分类:
其他好文 时间:
2018-11-10 19:04:08
阅读次数:
190
堆排序(Heap Sort) 是一棵具有以下性质的 : 大顶堆:每个结点的值都大于或等于其左右孩子结点的值 小顶堆:每个结点的值都小于或等于其左右孩子结点的值 的主要思想: 将待排序列构造成一个大顶堆,此时堆顶元素就是整个序列的最大值,将堆顶元素与堆数组的末尾元素进行交换。然后将剩余的n 1个元素重 ...
分类:
编程语言 时间:
2018-10-28 12:50:17
阅读次数:
144
注意,默认的heap是一个小顶堆! heapq模块提供了如下几个函数: heapq.heappush(heap, item) 把item添加到heap中(heap是一个列表) heapq.heappop(heap) 把堆顶元素弹出,返回的就是堆顶 heapq.heappushpop(heap, it ...
分类:
编程语言 时间:
2018-10-22 14:52:34
阅读次数:
205
再简单总结下堆排序的基本思路: a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆; b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端; c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。 ...
分类:
编程语言 时间:
2018-10-09 22:45:24
阅读次数:
228
1.优先队列 (1)大根堆(小顶堆) (2)小根堆(大顶堆) 用法 2.排序 (1)快排(STL万岁!$QwQ$) (2)结构体排序 (3)结构体内重载运算符 ...
分类:
编程语言 时间:
2018-10-06 18:32:41
阅读次数:
138
1.优先队列 (1)大根堆(小顶堆) (2)小根堆(大顶堆) 用法 2.排序 (1)快排(STL万岁!$QwQ$) (2)结构体排序 (3)结构体内重载运算符 ...
分类:
编程语言 时间:
2018-10-06 10:42:56
阅读次数:
179
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。 输入格式: 每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。 ...
分类:
其他好文 时间:
2018-10-05 10:45:19
阅读次数:
119
一、堆 完全二叉树 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),是不稳定排序 堆排序中的堆有大顶堆、小顶堆两种。他们都是完全二叉树 将该堆按照排序放入列表 1. 大顶堆: 所有的父节点的值都比孩子节点大,叶子节点值最小。r ...
分类:
编程语言 时间:
2018-09-26 01:12:49
阅读次数:
245
1、什么是堆 (1) 堆是具有以下性质的完全二叉树(那么,什么是完全二叉树呢?完全二叉树是一种除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐的树):每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时 ...
分类:
编程语言 时间:
2018-09-22 14:45:10
阅读次数:
151
不稳定 O(nlogn) 大顶堆(从大到小排序):每个结点的值都大于等于其左右孩子的值的二叉树 小顶堆(从小到大排序):每个结点的值都小于等于其左右孩子的值的二叉树 如何排序? 将待排序序列构建成一个小顶堆,堆顶的元素即为所有元素中的最小值 在输出堆顶的最小值之后,调整堆,使剩余的n-1个元素又建成 ...
分类:
编程语言 时间:
2018-08-30 01:56:19
阅读次数:
204