- 博客(19)
- 收藏
- 关注
转载 排序算法之基数排序
1.简介基数排序(radix sort) 属于“分配式排序” (distribution sort) , 又称“桶子法” (bucket sort) 或 bin sort,顾名思义, 它是通过键值的各个位的值, 将要排序的元素分配至某些“桶” 中, 达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法 基数排序(Radix Sort)是桶排序的扩展 基数排序是 1887 年赫尔曼· 何乐礼发明的。 它是这样实现的: 将整数按位数切割成不同的数字, 然后按每个位数分别..
2020-10-26 22:25:35 255
转载 排序算法之归并排序
简介 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 归并排序是一种概念上最简单的排序算法,与快速排序一样,归并排序也是基于分治法的。归并排序将待排序的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程...
2020-10-26 21:22:22 211
转载 排序算法之快速排序
简介 快速排序算法是对冒泡排序的一种改进,它采用了一种分治的策略,通常称其为分治法。分治法的思想是:将原问题分解为若干个规模更小的但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 即通过一趟排序将进行排序的数据分割成独立的两部分,其中一部分的数据比另一部分的数据都大,然后再按此访求对这两部分数据分别进行快速排序,这样循环往复,直到进行排序的数据按一定的顺序排列。 快速排序是C.R.A.Hoare于1962年提出的一种划分交...
2020-10-25 16:48:04 402
转载 排序算法之希尔排序
简介 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 希尔排序通过将全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步...
2020-10-24 22:32:36 1711 1
转载 逆波兰计算器分析和实现
简介 前缀表达式也叫波兰表达式。后缀表达式也叫逆波兰表达式。 逆波兰表达式实现计算器: package com.njcx.test3;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class PolandNotation { /** * 逆波兰计算器 1.输入一个逆波兰表达式(后缀表达式),使用栈(stack),计算其结果 2....
2020-10-21 22:11:27 130
转载 中缀表达式转换成后缀表达式
概述 可以看到,后缀表达式适合计算式进行运算,但是人却不太容易写出来,尤其是表达式很长得情况下,因此在开发中,需要将中缀表达式转成后缀表达式。 具体步骤 1.初始化两个栈:运算符栈s1和储存中间结果的栈s2; 2.从左至右扫描中缀表达式; 3.遇到操作数时,将其压s2; 4.遇到运算符时,比较其与s1栈顶运算符的优先级: (1)如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈; (2)否则,若优先级比栈顶运算符的高,也将运算符压入s1; (3)否则...
2020-10-21 21:52:53 888
转载 用栈实现综合计算器
思路分析 代码实现 package org.structure.stack;/** * 使用栈实现综合计算器 * @author cjj_1 * @date 2020-08-06 10:30 */public class IntegratedCalculatorStack { public static void main(String[] args) { //定义要计算的表达式 String expresion = "300+8*4-4";
2020-10-21 21:15:08 177 1
转载 环形链表和约瑟夫问题
约瑟夫问题简介 Josephu问题为:设编号为1,2, …n的n个人围坐一圈,约定编号为k (1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始损数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。 单向环形链表图示: 用环形单链表解决约瑟夫问题的思路 思路大概分为两个部分, 1)一是首先我们需要构建一个单向环形链表, 2)二是把这个链表当成约瑟夫问题中的...
2020-10-19 21:17:36 352
原创 数据结构之单链表的反转
分析 代码实现 package com.iamp.admin;public class Test { public static void main(String[] args) { //先创建几个节点 HeroNode heroNode1 = new HeroNode(1,"宋江","及时雨"); HeroNode heroNode2 = new HeroNode(2,"卢俊义","玉麒麟"); HeroNode hero
2020-10-18 14:50:39 246 2
转载 稀疏数组
定义 稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是指无效数据量远大于有效数据量的数组。 为什么要进行压缩存储呢? 1)原数组中存在大量的无效数据,占据了大量的存储空间,真正有用的数据却少之又少 2)压缩存储可以节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高IO效率 例如: 当一个数组中大部分的元素为0,或者为同一个值数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 1)记录数组...
2020-10-15 22:26:53 136
转载 hashCode的作用
1、hashCoed 的特性:(1)HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode经常用于确定对象的存储地址;(2)如果两个对象相同, equals方法一定返回true,并且这两个对象的HashCode一定相同;(3)两个对象的HashCode相同,并不一定表示两个对象就相同,即equals()不一定为true,只能够说明这两个对象在一个散列存储结构中。(4)如果对象的equals方法被重写,那么对象的HashCode也尽量重写。有
2020-10-15 16:00:36 7805
转载 Java数据结构和算法——链表
简介 前面博客我们在讲解数组中,知道数组作为数据存储结构有一定的缺陷。在无序数组中,搜索性能差,在有序数组中,插入效率又很低,而且这两种数组的删除效率都很低,并且数组在创建后,其大小是固定了,设置的过大会造成内存的浪费,过小又不能满足数据量的存储。 本篇博客我们将讲解一种新型的数据结构——链表。我们知道数组是一种通用的数据结构,能用来实现栈、队列等很多数据结构。而链表也是一种使用广泛的通用数据结构,它也可以用来作为实现栈、队列等数据结构的基础,基本上除非需要频繁的通过下标来随机访问各个数据,否则很
2020-10-15 13:44:06 188
转载 Java数据结构和算法——队列
队列的基本概念 队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first
2020-10-15 09:39:19 113
转载 Java数据结构和算法——栈
栈的基本概念 栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈..
2020-10-14 17:34:29 126
转载 java数据结构之冒泡、选择、插入排序算法
冒泡排序 这个名词的由来很好理解,一般河水中的冒泡,水底刚冒出来的时候是比较小的,随着慢慢向水面浮起会逐渐增大,这物理规律我不作过多解释,大家只需要了解即可。 冒泡算法的运作规律如下: ①、比较相邻的元素。如果第一个比第二个大,就交换他们两个。 ②、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数(也就是第一波冒泡完成)。 ③、针对所有的元素重复以上的步骤,除了最后一个。 ④、持续每次对越来越少的元素重复上面的..
2020-10-14 14:18:02 134
转载 java数据结构之数组
数组介绍 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型(Object类型数组除外)。 ⑴数组的申明 a:第一种方式: 数据类型 [] 数组名称 =new数据类型[数组长度]; 这里 [] 可以放在数组名称的前面,也可以放在数组名称的后面,我们推荐放在数组名称的前面,这样看上去 数据类型 [] 表示的很明显是一个数组类型,而放在数组名称后面,则不是那么直观。 ...
2020-10-13 16:29:04 128
原创 通过java -jar命令启动项目
nohup java -jar -Dspring.config.location=加载配置文件,多个的话以逗号隔开nohup java -jar -Dspring.config.location=../config/iamp-admin/bootstrap.properties,../config/iamp-admin/application.yml ../apps/iamp-admin-1.0-SNAPSHOT.jar --logging.config=../config/iamp-admin/log
2020-10-12 15:45:49 434
转载 springboot整合使用 Flyway 管理你数据库的版本变更
1. 前言随着项目的不断迭代,数据库表结构、数据都在发生着变化。甚至有的业务在多环境版本并行运行。数据为王的时代,管理好数据库的版本也成为了迫切的需要。如何能做到像Git之类的版本控制工具来管理数据库?Java项目中常用Flyway和Liquibase来管理数据库版本。其中Flyway相对来说比较受欢迎。2. Flyway 的特点Flyway大受欢迎是因为它具有以下优点:简单非常容易安装和学习,同时迁移的方式也很容易被开发者接受。 专一Flyway专注于搞数据...
2020-10-10 14:17:44 615
转载 为什么阿里巴巴Java开发手册中强制要求线程池不允许使用Executors创建?
手动创建线程有什么缺点? 1)不受控风险 这个缺点,相信你也可以说出一二 系统资源有限,每个人针对不同业务都可以手动创建线程,并且创建标准不一样(比如线程没有名字)。当系统运行起来,所有线程都在疯狂抢占资源,无组织无纪律,混乱场面可想而知(出现问题,自然也就不可能轻易的发现和解决) 如果有位神奇的小伙伴,为每个请求都创建一个线程,当大量请求铺面而来的时候,这好比一个正规木马程序,内存被无情榨干耗尽(你无情,你冷酷,你无理取闹) 另外,过多的线程自然也会引起上下文切换的开...
2020-10-10 11:03:04 549
空空如也
java微服务节点假死,网关路由时长延迟
2024-05-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人