数据结构与算法
我是纠结伦
这个作者很懒,什么都没留下…
展开
-
数据结构:树
一、树的基本概念1、树的定义树是n(n>=0)个结点的有限集。当n = 0时,称为空树。在任意一棵非空树中应满足:有且仅有一个特定的称为根的结点。 当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了自身,树是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。树中所原创 2022-04-26 21:25:58 · 284 阅读 · 0 评论 -
排序算法:堆排序
堆排序 要学习堆排序,首先要学习堆的向下调整算法,因为要用堆排序,你首先得建堆,而建堆需要执行多次堆的向下调整算法。堆的向下调整算法(使用前提): 若想将其调整为小堆,那么根结点的左右子树必须都为小堆。 若想将其调整为大堆,那么根结点的左右子树必须都为大堆。向下调整算法的基本思想(以建大堆为例): 1.从根结点处开始,选出左右孩子中值较大的孩子。 2.让大的孩子与其父亲进行比较。 若大的孩子比父亲还大,则该孩子与其父亲的位置进行交换。并将原来大的孩子的位置当成父亲继续向下进行调整原创 2022-04-18 21:39:27 · 114 阅读 · 0 评论 -
排序算法:希尔排序
.希尔排序步骤:1.先选定一个小于N的整数gap作为第一增量,然后将所有距离为gap的元素分在同一组,并对每一组的元素进行直接插入排序。然后再取一个比第一增量小的整数作为第二增量,重复上述操作…2.当增量的大小减到1时,就相当于整个序列被分到一组,进行一次直接插入排序,排序完成。动图如下:class Solution { void ShellSort(vector<int>& arr) { int size = arr.size(); int gap = si原创 2022-04-10 17:45:37 · 289 阅读 · 0 评论 -
算法之单调栈
栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)。听起来有点像堆(heap)?不是的,单调栈用途不太广泛,只处理一种典型的问题,叫做 Next Greater Element。比如说,输入一个数组 nums = [2,1,2,4,3],你返回数组 [4,2,4,-1,-1]。解释:第一个 2 后面比 2 大的数是 4; 1 后面比 1原创 2022-04-09 15:40:20 · 87 阅读 · 0 评论 -
排序算法:快速排序
快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。接下来用图示的方法来展示完整的过程:void Quick_Sort(int *arr, int begin, int end){ if(begin > end) return; int tmp = arr[begin]; int i = begin; int j = end; while(i != j){ while(arr[j] >原创 2022-04-07 22:33:49 · 523 阅读 · 1 评论 -
排序算法:插入排序
插入排序1.从第一个元素开始,该元素可以认为已经被排序2.取下一个元素tem,从已排序的元素序列从后往前扫描3.如果该元素大于tem,则将该元素移到下一位4.重复步骤3,直到找到已排序元素中小于等于tem的元素5.tem插入到该元素的后面,如果已排序所有元素都大于tem,则将tem插入到下标为0的位置6.重复步骤2~5动图演示如下:思路: 在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。按照此法对所有元素进行插入,直.原创 2022-04-07 22:11:43 · 75 阅读 · 0 评论 -
排序算法:选择排序
选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置知道未排序元素个数为0。 选择排序的步骤:1>首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。2>再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。3>重复第二步,直到所有元素均排序完毕。 此处引用网上一张比较经典的gif来展示选择排.原创 2022-03-24 17:15:04 · 237 阅读 · 0 评论 -
排序算法:冒泡排序
一、冒泡排序思路:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数;排除最大的数,接着下一轮继续相同的操作,确定第二大的数...重复步骤1-3,直到排序完成。动画演示:实现代码:/*** @author Ye Hongzhi 公众号:java技术爱好者* @name BubbleSort* @date 2020-09-05 21:38**/public class ...原创 2022-03-24 17:05:23 · 943 阅读 · 0 评论