C++
「已注销」
是个小菜鸡
展开
-
在分而治之思想指导下的归并排序和快速排序算法
1.引入对于数据结构来说最先上手的一定是排序算法了,这时最基础的当然也很重要,从最基础的四种复杂度为O(n2)的排序算法(如果忘记了请移步)到比较烧脑的基数排序当然还有基数排序的前奏箱子排序如果遗忘请移步当然在某些情况下箱子排序和基数排序能够达到惊人的复杂度O(n)但是这并不普适,只适用于特定的情况。那么有没有一些普适的排序算法并且复杂度降到O(n2)以下呢。有的人想到了堆排序,不错堆排序确实可...原创 2019-12-24 22:16:05 · 258 阅读 · 0 评论 -
数据结构图的实现,优先搜索和迪杰斯特拉算法(单源最短路径),Kruskal算法(最小生成树)的实现
1.图的分类图分为无权无向图,加权无向图,无权有向图和加权有向图。我们可以让加权有向图作为超类,其他的图作为他的派生类。当权值都相同时就相当是无权图了,当凡是有边(i,j)总是有边(j,i)就相当于是无向图了。为了讨论迪杰斯特拉和Kruskal算法简单,这里我们选用加权无向图。2.图的实现:通常图的实现方式有邻接矩阵,邻接链表和邻接数组三种方式。我这选用的邻接矩阵最容易实现。代码实现...原创 2019-12-23 17:21:09 · 343 阅读 · 0 评论 -
堆操作大全
一、定义1.优先级队列:不同于队列这种数据结构,优先级队列元素出队列的顺序是由元素的优先级决定的,可以递增也可以是递减的。2.大根树(小根树):每个节点的值都大于(小于)或等于其子节点的值。3.大根堆(小根堆):既是大根树(小根数)也是完全二叉树。二、大根堆的插入与删除操作由于堆是完全二叉树,所以用数组描述最为高效。1.插入:插入操作比较简单,把新元素插入新节点,然后沿着新节点...原创 2019-11-16 14:43:22 · 252 阅读 · 0 评论 -
完全二叉树操作大全
1.二叉树的定义二叉树( binary tree)t 是有限个元素的集合(可以为空)。当二叉树非空时,其中有一个称为根(root)的元素,余下的元素(如果有的话)被组成2个二叉树,分别称为t的左子树和右子树.你会发现二叉树的定义都含有递归的思想,没错二叉树的很多操作都要依赖递归完成。完全二叉树:从满二叉树上删除有限个元素产生的二叉树。比较规则。二叉树的遍历遍历是二叉树中最常用的操作:...原创 2019-11-15 21:58:38 · 382 阅读 · 0 评论 -
迷宫老鼠
1.迷宫老鼠问题是要寻找一条从入口到从出口的路径。2.设计思路:假定用n×m的矩阵来描述迷宫,位置(1,1)表示入口,(n,m)表示出口,n和m分别代表迷宫的行数和列数。迷宫中的每个位置都可用其行号和列号来指定。在矩阵中,当且仅当在位置(i,j)处有一个障碍时其值为1,否则其值为0。效果图:1.偏移量: 创建一个偏移量(类型为position)数组专门记录移动操作的偏移量。//初始...原创 2019-11-13 17:18:07 · 875 阅读 · 0 评论 -
C++实现输出一个集合的全部子集
大佬代码原创 2019-11-10 16:17:27 · 5571 阅读 · 1 评论 -
C++基本数据类型转换char(char*),int和string
1.string和intstring-int采用标准库中atoi函数。但是由于atoi函数要求的参数是char所以调用string的c_str函数将string转变为charfigures.get(i-1) = atoi(figures.get(i-1).c_str())*atoi(figures.get(i+1).c_str());int-string采用标准库中的to_string函...原创 2019-10-26 21:47:15 · 1791 阅读 · 0 评论 -
箱子排序和基数排序
之前有一个关于排序方法的总结详见该片博文在总结中四种排序方法的复杂度均为O(n^2)。最近又整理了一下复杂度不是**O(n^2)**的两种排序方法箱子排序和基数排序。而基数排序又是在箱子排序的基础之上改进的。1.箱子排序...原创 2019-10-22 20:03:07 · 638 阅读 · 0 评论 -
关于复杂度的渐进记法
1.大O记法,上限。有意义的是最小上限。2.Ω记法,下限。有意义的是最大下限。3.Q记法,当最大下限等于最小上限时,使用该记法。常见函数渐进性比较:项 名称1 常数logn 对数n 线性nlogn n个lognn2 平方n3 立方2n 指数n! 阶乘1 < logn < n < ...原创 2019-09-29 16:52:21 · 706 阅读 · 0 评论 -
数据结构与算法之基础的排序方法
1.按名次排序。思路先将数组中的元素的序号求出并储存在一个数组中,再创建一个数组将目标数组的元素按序号储存到该数组中,再将该数组复制到目标数组中,最后删除该数组。代码如下://1.计数排序 复杂度需要n*(n-1)/2次比较和2n次移动void ranks(int a[],int n, int r[]){//r【i】中存的是第i元素的大小在第r【i】 for(int i...原创 2019-09-27 17:10:07 · 191 阅读 · 0 评论