【DataStructure】
fanfan4569
登上山顶,欣喜掩盖疼痛。
展开
-
希尔排序(Shell Sort)
#include<cstdio>#include<algorithm>using namespace std;#define MAXN 100000int A[MAXN];int N;void Shell_sort(){ int i; int temp; for(int D = N / 2; D > 0; D /= 2){ //希尔排序 for(原创 2016-12-14 20:35:33 · 386 阅读 · 0 评论 -
表排序、桶排序、基数排序
一、表排序 二、桶排序 三、基数排序四、多关键字排序原创 2017-01-03 19:08:53 · 411 阅读 · 0 评论 -
并查集(含代码)
并查集是一种用来管理元素分组情况的数据结构 作用: 1。查询云元素a和元素b是否属于同一组 2。合并元素a和元素b所在的组。数组par表示的是父亲的编号,par[x] = x时,x是所在的树的根。使用rank[MAXN]是使其路径压缩。int par[MAXN]; //父亲int rank[MAXN]; //树的高度//初始化n个元素void init(int n)原创 2017-03-13 11:27:04 · 397 阅读 · 0 评论 -
堆
堆的实现堆分为大顶堆和小顶堆其操作: (1)插入时,插入在最后,然后向上调整 (2)删除时,将最后一个元素调至到堆顶,然后向下调整 (3)堆的生成分两种: ①插入后再调整 ——-时间复杂度O(NlogN) ②先排成完全二叉树再调整 ——-时间复杂度O(N) 这两者区别,有时拍完后的二叉树不一定一样注意练习题目链接:https://pta.patest.cn/pt原创 2016-11-03 20:31:03 · 347 阅读 · 0 评论 -
AVL(平衡二叉树)(含代码)
o(╯□╰)o 每次遇到AVL怕怕的,总是要面对的,啊~ 来吧AVL浙大ppt还是很好理解的原创 2016-11-06 09:53:06 · 742 阅读 · 0 评论 -
Huffman
一脸懵逼, 喝了女票的咖啡, 睡不着提不起劲, 不能再拖了, 得马上攻下, code是copy别人的(哭泣脸), 需谨记!!! 题目链接:https://pta.patest.cn/pta/test/1342/exam/4/question/21733代码来源:http://blog.csdn.net/xijujie/article/details/53046057/** Do原创 2016-11-09 20:44:11 · 482 阅读 · 0 评论 -
图 之 Dijkstra算法(附带习题代码)
我的理解 从开始顶点出发,先将开始顶点吃入(即标记已访问) 1。找其最短的边所连的顶点 2。将其吃入(即标记已访问) 3。遍历与其相连的其他顶点 4。若从V 到W距离小于之前到W的距离,则修改(更新) 5。可以用个堆栈来存储路径 6。循环1~4 更新距离, 直至所有的顶点都已经吃入/* 邻接矩阵存储 - 有权图的单源最短路算法 */Vertex FindMinD原创 2016-11-17 20:28:21 · 8009 阅读 · 0 评论 -
图 之 Floyd 算法
我的看法 找i 到 j 的最短路径, 加入若干个k 若 i 到 k - k 到 j 的路径更短, 则更新;反之继续 ①初始化D[i][j] 对角线初始化为0 ②若两个顶点有邻边则加上权值 ③若两个顶点无连边则赋值为+无穷/* 邻接矩阵存储 - 多源最短路算法 */bool Floyd( MGraph Graph, WeightType D[][MaxVertexNum],原创 2016-11-18 20:47:17 · 667 阅读 · 0 评论 -
最小生成树(Minimum Spanning Tree)
引出贪心算法Prime算法对于稠密图,比较合适 我的理解: (1)首先收录一个顶点,其parent就设为-1(并查集概念) (2)然后比较这个顶点的其他边 (3)若有比其小,则重新设定 (4)直至这个边不存在/* 邻接矩阵存储 - Prim最小生成树算法 */Vertex FindMinDist( MGraph Graph, WeightType dist[] ){ /* 返回未被收录顶原创 2016-12-06 21:49:24 · 1468 阅读 · 0 评论 -
拓扑排序
AOV(Activity On Vertex)网络 /* 邻接表存储 - 拓扑排序算法 */bool TopSort( LGraph Graph, Vertex TopOrder[] ){ /* 对Graph进行拓扑排序, TopOrder[]顺序存储排序后的顶点下标 */ int Indegree[MaxVertexNum], cnt; Vertex V; Ptr原创 2016-12-09 22:08:34 · 367 阅读 · 0 评论 -
简单排序
逆序对 的 使用冒泡排序思路: N次循环,每次安排定一个位置(从一个方向开始两两比较)#include<cstdio>#include<algorithm>using namespace std;#define MAXN 100000int A[MAXN];int N;void solve(){ for(int P = N - 1; P >= 0; P--){原创 2016-12-13 21:31:47 · 314 阅读 · 0 评论 -
堆排序
持续更新。。。void Swap( ElementType *a, ElementType *b ){ ElementType t = *a; *a = *b; *b = t;}void PercDown( ElementType A[], int p, int N ){ /* 改编代码4.24的PercDown( MaxHeap H, int p ) */ /* 将N个元原创 2016-12-14 21:46:21 · 278 阅读 · 0 评论 -
归并排序
(1)先上PPT (2)伪代码/* 归并排序 - 递归实现 *//* L = 左边起始位置, R = 右边起始位置, RightEnd = 右边终点位置*/void Merge( ElementType A[], ElementType TmpA[], int L, int R, int RightEnd ){ /* 将有序的A[L]~A[R-1]和A[R]~A[Right原创 2016-12-22 21:43:44 · 464 阅读 · 0 评论 -
快速排序(基准是中位数)
简介: 快排相比冒泡等相对较快,是因为其是跳跃式交换(快,要根据数据量等)下面算法介绍: ①根据数据量,若大于cutoff,则用快排,反之用插入排序 ②先找基准(这里采用中位数),并将基准放在Right-1的位置(Right放比较三个数最大那个) ③从左边向右开始找,若找到比基数大的(则左边指针停下);然后从右边开始向左找,若找到比基数小的(则右边指针停下); ④交换左右指针所指的数 ⑤原创 2017-01-02 11:46:33 · 6187 阅读 · 0 评论 -
【DataStructure】之 B树
心里有点”B树”。 ———– 一个更胖的”二叉查找树”一、B树的定义 ceil :表示向上取整。 ceil(3) = 2 ; ceil(4) = 2比如: 二、B树的高度(磁盘存取次数) 一个B树包含:n 个关键字、高度为 h 、 阶数为 m 的B树。(q 表示 c原创 2017-11-03 20:25:24 · 984 阅读 · 0 评论