[toc] 什么是堆 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 通常将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。 堆的存 ...
分类:
编程语言 时间:
2019-03-10 23:30:51
阅读次数:
372
一、Prim算法实现 思路: 1、一个存储最小树的边列表mst、一个存储最小树的点集合used、一个堆,排序最小树边缘的最小边。堆顶为最小值。 2、建立邻接表,如{'A':[(7,'A','B'),(5,'A','D')]} 3、随机选初始点 4、排序初始点的边权重,建立堆 代码: 二、村庄造路问题 ...
分类:
其他好文 时间:
2019-03-09 23:45:23
阅读次数:
213
排序算法总结: 快速排序算法: 是基于分治的算法,关键在于划分操作; 性能分析: 堆排序: 归并排序: 拓扑排序: ...
分类:
编程语言 时间:
2019-03-09 01:20:29
阅读次数:
194
基本概念: 1、完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。 2、满二叉树:满二叉树是一种特殊的的完全二叉树,所有层的结点都是最大值。 定义: 1、堆是一颗完全二叉树; 2、堆中的某个结点的值总是大于等于(最大堆)或小于等于(最小堆)其 ...
分类:
编程语言 时间:
2019-03-04 15:56:55
阅读次数:
213
```cpp include include using namespace std; const int maxn=1e5+5; int a[maxn], n; void adjust(int s, int t) { int dad=s; int son=dad 2; while(sona[son ...
分类:
编程语言 时间:
2019-03-04 12:45:39
阅读次数:
190
为什么要不稳定啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 我弄了一上午啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 你怎么能不稳定呢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ...
分类:
编程语言 时间:
2019-03-01 12:40:34
阅读次数:
208
前言:网上有很多堆排序的案例,我只想写自己堆排序。 一:堆结构 即:一个父节点最多只能有两个子节点(可以没有),如下图 图1 图2 图3 图4 二: 数组与堆结构转换 假设已知堆数组 int[] a = {9,7,6,4,5,1,3,2,} 则相应对结构如下 图5 备注: 一个父节点(pNode 为 ...
分类:
编程语言 时间:
2019-02-27 13:04:57
阅读次数:
170
一、原理 ? 堆排序是采用数据结构堆进行排序的算法。堆是一种近似完全二叉树的结构,并同时满足堆的性质:子节点的键值或索引总是小于(或大于)它的父节点。 ? 堆中定义以下几种操作: ? 1) 最大堆调整(Max Heapify):将堆的末端子节点作调整,使得子节点永远小于父节点 。 ? 2) 创建最大 ...
分类:
编程语言 时间:
2019-02-27 01:27:13
阅读次数:
225
源码实现: 运行结果: 算法理解: 1. 性能方面抽离最大值需要n数量级的循环,每次循环中heap的构建复杂度log(n),综合是nlog(n)的量级; 2. 算法的总体思想是,构建最大堆->找到最大值->剩下的进一步构建最大堆->再找次最大....依次递归; ...
分类:
编程语言 时间:
2019-02-23 17:11:35
阅读次数:
199
排序算法有很多种,并在实际编程过程中用的非常广泛。常用的排序算法有:插入排序算法,选择排序算法,冒泡排序算法,快速排序算法,归并排序算法,希尔排序算法,堆排序算法。
分类:
编程语言 时间:
2019-02-21 09:46:42
阅读次数:
150