数据结构与算法
文章平均质量分 56
噢!不杰克
日常技术、问题分享,悠然自得、老实巴交的码农。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java堆排序
Java堆排序1、大顶堆,父节点大于任意一个子节点,升序排序用大顶堆2、小顶堆,任何一个字节点都比父节点大,降序排序用小顶堆3、思路:把数组转为大顶堆的树,后,交换第一个和最后一个的位置,取出最后一个,在组成大顶堆,不断循环,直到取到最后一个。4、需要注意的问题:转成大顶堆后交换0和arr.length的位置,在转大顶堆的过程中,从最后一个节点的父节点开始找,如果这个节点比他的左或右节点小,那么交换位置,交换位置后,可能会破坏之前排好的堆,所以之前排好的堆需要重新调(递归)5、代码实现//原创 2021-10-18 11:20:57 · 193 阅读 · 0 评论 -
Java基数排序(可负数)
Java基数排序(可负数)一、基数排序(radix sort) 基本思想:一个待排序的数组,按个十百千等位数,来划分,这个数组中的最大值是多少位数,就需要排序多少次,从个位数开始,如下图。参考:思想 、代码二、思路i. 开始排个位数放入的结果为:取出的结果为:Ii .开始排十位数(以个位数排序过的数组为基数组)取出的结果为:Iii.百位数排序(以十位数排序过的数组为基数组)取出的结果为那么这个排序的最终结果就为 2,7,34,45,67,76,367,508,897。原创 2021-10-12 11:56:15 · 1112 阅读 · 3 评论 -
JAVA 十大排序算法(自用笔记)
排序算法一、排序算法一缆二、算法的时间复杂度O(n^M)(算法(程序)的执行时间)①、度量算法(程序)的执行时间的两种方法,已经时间频度1)、事后统计的方法 这种方法可行,但是有两个问题,一是要想对设计的算法的运行性能进行评测,需要实际运行该程序,二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,这种方式,要在同一计算机的相同状态下运行,才能比较那个算法速度更快。2)、事前估算的方法通过分析某个算法的时间复杂度来判断那个算法更优3)、时间频度一个算法花费的时间与算法中语句的执行次原创 2021-09-26 15:26:36 · 261 阅读 · 0 评论 -
迷宫——递归
迷宫问题一、问题说明说明:小球得到的路径,和程序员设置的找路策略有关即:找路的上下左右的顺序相关再得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化测试回溯现象思考: 如何求出最短路径?二、解决思路① 使用二维数组来创建迷宫int size=0;//用来统计,总结走了几步 //先创建一个二维数组,模拟迷宫 //地图 int [][] map = new int[8][7]; //使用1表示墙,上下全部设置为1 for (int i原创 2021-09-13 14:33:06 · 247 阅读 · 0 评论 -
递归-八皇后问题(回溯算法)
递归-八皇后问题(回溯算法)递归一、问题描述八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。二、解决问题的思路①、第一个皇后先放第一行第一列②、第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适③、继续第三个皇后,还是第一列、第二列……直到第原创 2021-09-13 11:53:25 · 392 阅读 · 0 评论 -
数据结构之栈
栈(Stack)1.栈是一个先入后出(FILO-First In Last Out)的有序列表。2.栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称之为栈顶(TOP),另外一端为固定的一端,称之为栈低(Bottom)。3.根据栈的定义可知,最先放入栈中元素在底部,最后放入的元素在栈顶,而删除元素刚好相反,组后放入的元素最先删除,最先放入的元素最后删除。4.出栈入栈的示意图 5.栈的应用场景:1)、逆序输出、语法检测,符号成对出现原创 2021-09-03 10:03:05 · 209 阅读 · 0 评论 -
根据父级id查询父级下的所有子级(递归算法)
根据父级id查询父级下的所有子级(递归算法)一、问题:这里的递归主要用来做,根据父级id查询父级下的所有子级,返回list集合,并放到分页中,分页使用的是,mybatis-plus的插件。解决:先设置一个全局的list,用来装我们拿到的数据,写一个递归的方法,让它一直不断的自我调用,来判断传过来的d与其他数据中的父节点id是否相同,如果相同,把改条数据的id赋值给之前传过来的id,这样,id可以不断变化,不断向下遍历。????,这里会有一个问题,如果它的父节点下面有两个子节点点,第一个子节点下面还有一原创 2021-08-31 15:03:08 · 2533 阅读 · 0 评论 -
Java递归实现树结构(包含Java 8 方法)
递归实现树结构数据一、递归概念:自己的理解,自己调用自己,何为自己钓鱼呢自己,比如下面的**chilMenus.add(buildChilTree(menuNode))**就是在自己调用自己,查询到下一级的下一级,有几级我就调用几次我自己,从而实现树状结构中的父节点下的所有子级。//递归,建立子树形结构 public Menu buildChilTree(Menu pNode){ List<Menu> chilMenus =new ArrayList<Menu>();原创 2021-08-27 17:01:49 · 23320 阅读 · 6 评论 -
数据结构之双向链表
双向链表1)、双向链表的构造:head节点、data、next(指向下一个)、pre(指向上一个)2)、双向链表的添加、遍历、删除、修改的操作思想===>代码实现a.遍历;方式和单链表一样,只是可以向前查找,向后查找b.添加(默认添加到双向链表的最后);先找到双向链表的最后这个节点,temp.next=newHead 最后一个节点指向新节点,新节点的pre指向我们的最后一个节点,newHead.pre=temp;c.修改:思路和原来的单项链表一样d.删除:双向链表可以实现自我删除,直接原创 2021-08-26 15:52:07 · 514 阅读 · 0 评论 -
数据结构之链表
链表(Liked List)一、链表的概念链表是有序的列表,但是在内存中链表的各个节点不一定是连续的。下图是链表在内存中的存储结构示意图总结:a.链表是以节点的方式存储,链式存储b.每个节点包含了data域(存值)、next域(指向下一个节点)c.链表的各个节点不一定是连续存储的d.链表分带头节点的链表和没有带头节点的链表,根据实际的需求来确定二、单链表单链表(带头结点)逻辑结构示意图,实际并不连续. 单链表的创建,不按编号添加,头节点只写一次,思路分析如下上述原创 2021-08-26 10:55:25 · 252 阅读 · 0 评论 -
数据结构之队列
队列1)、使用场景:银行排队系统2)、概念a.队列是一个有序列表,可以用数组或者链表来实现。b.遵循先入先出的原则c.数组队列示意图,maxSize最大容量、Queuce类、front队列前端,rear队列后端,front随数据输出而变化,rear随数据输入而变化d.当我们将数据存入队列时,称为,“addQueue”它需要处理两个步骤①将尾指针往后移,rear+1 ,当front==rear时队列为空②若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数组元素原创 2021-08-23 16:57:01 · 186 阅读 · 0 评论
分享