![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
catch_dreamer
这个作者很懒,什么都没留下…
展开
-
计数排序和桶排序算法的实现(python&java)
1.计数排序1. 简介计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。其时间复杂度为 O(n + k),需要注意的是,该排序算法并不是一种比较排序算法,其主要步骤如下:找出待排序数组中的最大值统计数组中每个值为v元素出现的次数,存入数组Coun的第v项反向填充目标数组,将每个元素v放在新数组result的第Coun(v)项,每放一个元素就将Coun(v)减去1从上面步骤可以看出,如果待排序数组中数原创 2020-12-06 17:26:28 · 137 阅读 · 0 评论 -
二叉树的前中后序及层次遍历(python)实现(包含递归非递归)
递归实现二叉树的前中后序遍历二叉树的前序遍历# 此方法会将遍历的结果保存在result列表中def preorderTraversal(node:TreeNode,result:list): if node is None: return result.append(node.val) if node.left is not None: preorderTraversal(node.left,result) if node.right is not None: preorderTr原创 2020-09-23 18:21:14 · 372 阅读 · 0 评论 -
python实现单向链表
节点类的实现class Node: def __init__(self,value,next=None): self.value = value self.next=next链表类的实现class Link: def __init__(self): self.pHead = Node(-1) # 创建一个虚拟节点 def get_length(...原创 2020-01-01 18:30:10 · 192 阅读 · 0 评论 -
归并排序——python实现
归并函数实现def merge(arr,left,middle,right): if left < right: #当left<right的时候,进行归并 i = left j = middle+1 temp = [] while i<=middle and j<=right: # 遍历数组两半的公共部分 if arr[i]<=arr[j]:...原创 2019-12-31 16:19:34 · 124 阅读 · 0 评论 -
基础排序(冒泡,选择,插入)——python实现
冒泡排序冒泡排序需要用到双重循环,第一个循环用于记录遍历的次数,而第二个循环用于控制遍历的位置,每遍历一次,就会排好最右边一个数的位置。实现代码:def bubble_sort(arr): i = 0 length = len(arr) for i in range(0,length): for j in range(0,length-(i+1)): #减掉遍历的次数是因为这右边...原创 2019-12-31 14:27:10 · 138 阅读 · 0 评论 -
用邻接表表示图
如下图用邻接表表示上图的结果如下用python实现保存一个图的邻接表class Graph: def __init__(self,n): #n表示顶点的个数 self.vertexList = [] #保存顶点的数组 self.HeadNodes = [[i] for i in range(n)] #保存边 self.n = n #...原创 2019-12-21 17:50:10 · 488 阅读 · 1 评论 -
用临界矩阵表示图
示例假设有如下一个图:其临界矩阵的表示结果如下:如上图,与某个节点相连的节点均用1表示,比如与A节点相连的有B和C,那么(A,B)和(A,C)位置就用1表示。python实现邻接矩阵注意此处不能用[0]*n来创建列表。class Graph: def __init__(self): self.vertexList = [] #用来记录图的顶点的列表 ...原创 2019-12-21 15:36:36 · 890 阅读 · 0 评论 -
树及二叉树的相关概念及二叉树的相关特性
树的相关概念树: 树(tree)是一个非空的有限元素的集合,其中一个元素为根(root)元素,而剩下的元素组成子树(如果有其余的元素)。树的级: 树的常用概念之一就是级,我们规定根节点的级数为1,根节点的子节点的级数为2,根节点的子节点的子节点的级数为3,以此类推。树的度: 我们将一个节点拥有子节点的个数称为该节点的度,由此可知,叶节点的度数一定为0,而完全二叉树中根节点及其非末尾节点的度数...原创 2019-12-30 14:29:02 · 722 阅读 · 0 评论 -
堆栈——链表实现(链式栈)(C++版)
定义前面说了用数组(顺序表)实现堆栈,用数组实现堆栈这种方法既高效又简单,但是在描述两个以上的堆栈时,虽然可以提高空间利用率,但是却增加了Add操作的时间复杂度。除此之外,也可以使用链表的方式来实现一个堆栈来解决上述问题,这种方式虽然使每个元素多了一个指针的空间,但是却使时间复杂度得到了有效的降低。一般来讲,我们将链表的左端作为top指针所指向的位置,这样可以降低编码的复杂性和操作的时间复杂性...原创 2019-12-30 14:32:20 · 2440 阅读 · 2 评论 -
堆栈——顺序栈(C++实现)
堆栈定义堆栈本质是一个线性表,其插入和删除操作都在表的同一端进行,其中表的两端分别被称为栈顶和栈低。堆栈的结构如下:刚开始的时候,top指向栈底,然后每进入一个元素,top指针就上移一位,每删除一个元素,top就下移一位。这个过程称为出栈入栈。图解如下(来自于《数据结构算法与应用-C++语言描述》):如上图,如果入栈一个元素E,那么结果如图b所示,如果图b出栈三个元素,那么结果如图c所示...原创 2019-12-17 12:05:26 · 827 阅读 · 0 评论 -
双向链表
双向链表定义双向链表一般有三个域,为一个数据域和两个指针域,两个指针域分别指向其前一个节点和后一个节点。结构图解如下:可以看到,第一个节点没有上一个结点,我们将其last指针域指向NULL,最后一个节点没有下一个结点,我们将其next指针域指向NULL,剩下的节点都是last指针域指向上一个节点,而next指针域指向下一个结点。双向链表的C++描述节点类的描述:template<...原创 2019-11-19 14:05:42 · 2711 阅读 · 0 评论 -
循环链表
单向循环链表的定义循环链表与单向链表的结构比较类似,不同的地方在于其最后一个节点的指针域并不指向NULL,而是指向了首节点first,这样就构成了一个循环,其结构如下:从上面也可以看出,其和单向链表的区别就在于最后一个节点的指针域的值不同,并且其还有一个节点作为表头节点,这个节点是的数据是空的。所以,对于单项循环链表的描述和单向链表是一致的,不过在插入等操作上会有不同,下面是其描述代码:t...原创 2019-11-20 13:45:00 · 4486 阅读 · 0 评论 -
单向链表的操作
建立单向链表template<class T>class Chain;//声明链类template<class T>//实现节点类class Node{ friend class Chain<T>; private: T data; Node<T>* link; Node(T newdata){data=newdata;}...原创 2019-11-16 00:14:42 · 154 阅读 · 0 评论 -
归并排序——图解及C++实现
归并排序原创 2019-11-14 22:40:12 · 512 阅读 · 0 评论 -
C++实现查找算法
这里主要讲两种查找算法,一种是顺序查找算法,一种是折半(二分)查找算法,其中二分查找算法主要讲循环实现和递归实现两种方法。下面先看顺序查找。顺序查找算法顺序查找算法是按照数组中元素的顺序,按照从左往右或者从右往左的顺序遍历数组,将数组中的元素逐个与要查找的元素进行比较,如果找到,就返回相应的下标,如果到数组遍历完成都没有找到,就返回-1。实现示例:template<class T&g...原创 2019-11-21 22:38:08 · 440 阅读 · 1 评论 -
C++中的递归
递归的定义所谓递归,就是在一个函数的内部调用这个函数,那么递归自然包含调用这个函数的部分,为了终止递归的过程,还需要定义一个递归终止的条件。递归的简单结构:返回值类型 函数名(参数){ if(递归终止条件){ 终止递归; } else{ 包含本函数调用的语句 }}实例1:用递归求斐波拉契数列首先,斐波拉契数列是指:1,1,2,3,5,…,n这样的数字,其中,第n个数...原创 2019-11-21 22:42:16 · 1520 阅读 · 0 评论 -
C++中交换两个变量的值的方法
首先,需要说明的是,在C++语言中,不能使用下面的方式传值:template<class T>void swap(T a,T b){ T temp=b; b=a; a=temp;}即不能通过将变量名传入函数的方式进行交换,因为这种方式是将值进行拷贝后作为参数传入函数,也就是说函数内部使用的拷贝的值,在函数执行完后就会销毁,而不是对变量的原值进行操作。而在C++中需要通...原创 2019-11-14 22:39:17 · 25781 阅读 · 1 评论 -
快速排序算法
原理(以一个示例说明)以一个数组说明,元素及数组名如下:数组为:int a[] = {5,4,7,6,8,0,9,1,2};过程1、从中选取一个数作为基准数key,我们默认选择第一个数作为基准数,然后定义两个变量left和right,分别代表数组的最小下标和最大下标。2、先从左往右遍历数组,再从右往左遍历数组;这里定义两个变量i和j,其中i从左往右遍历,j从右往左遍历数组,遍历方式如下:...原创 2019-11-05 18:06:53 · 162 阅读 · 0 评论 -
算法中基础的排序算法(C++)
冒泡排序原理过程实现原创 2019-11-13 11:18:28 · 229 阅读 · 0 评论