自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

当一个合格的软件工程师

不做代码的搬运工。

  • 博客(53)
  • 收藏
  • 关注

原创 OSI七层模型相关知识

什么是ISO?ISO是“国际标准化组织”的英文简称,其全称是International Organization for Standardization。ISO成立于1947年2月23日,是世界上最大的国际化标准组织。OSI七层协议模型OSI模型(Open System Interconnection Model)是一个由ISO提出得到概念模型,试图提供一个使各种不同的的计算机和网络在世界范围内实现互联的标准框架。分层结构OSI七层模型主要分为以下七层(从下至上): 物理层、数据链路层、

2021-12-15 11:23:13 201

原创 @RunWith注解找不到,怎么办?

1、新版spring-boot-starter-test不再集成junit,而是junit-jupiter在这里,先说明我使用的版本SpringBoot 2.5.5spring-boot-starter-test 2.5.52、该问题的起因是在测试类中使用@RunWith注解,发现找不到该类,到依赖里从父依赖到子依赖都没有找到junit ?只找到一个相似的,junit-jupiter,初步估计是junit的替代品。到百度一查,发现确实如此。那么就简单了,使用junit-jupiter,不再使用

2021-10-20 16:56:24 6088 1

原创 和互联网大厂的爱恨情仇

刚开始盲猜一波,我相信肯定有一些人认为,想要找一份java后端工作,要去学习redis,要去学习dubbo,还要去学习springboot,springcloud等等等等一系列的知识。没错,需要学习这些,这时候有人还补充说,还需要项目,对,也没错,这可以丰富你的简历。但是,如果你的定位是大厂,如果是腾讯,阿里,百度,字节这种大型互联网公司,如果你还是只学习刚才说的那些,我相信你永远都走不到面试那一关。如果有幸看到这篇文章,而且还是在校生,我建议你着重学习一下基础,比如数据结构与算法,比如jvm.

2021-10-13 09:40:32 2219

原创 Java对马踏棋盘问题(骑士周游问题)的实现

14.10.2 马踏棋盘游戏代码实现马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用。如果使用回溯(就是深度优先搜索)来解决,假如马儿踏了 53 个点,如图:走到了第 53 个,坐标(1,0),发现已经走到尽头,没办法,那就只能回退了,查看其他的路径,就在棋盘上不停的回溯…… ,思路分析+代码实现对第一种实现方式的思路图解分析第一种方式的问题,并使用贪心算法(greedyalgorithm)进行优化。解决马踏棋盘问题。不使用贪心算法,要回溯的太多,效率太低。使用

2021-10-13 08:34:36 2025

原创 Java实现用弗洛伊德(Floyd)算法解最短路径问题

14.9 弗洛伊德算法14.9.1 弗洛伊德(Floyd)算法介绍和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗

2021-10-13 08:34:22 2396

原创 Java用迪杰斯特拉算法(Dijkstra)求最短路径问题

14.8 迪杰斯特拉算法14.8.1 应用场景-最短路径问题看一个应用场景和问题:战争时期,胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六个村庄各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何计算出 G 村庄到 其它各个村庄的最短距离?如果从其它点出发到各个点的最短距离又是多少?这个问题先放在这,我们先来看看什么是迪杰斯特拉算法,在来解题。14.8.

2021-10-13 08:34:07 2234

原创 Java用克鲁斯卡尔算法(kruskal)解决公交站问题

14.7 克鲁斯卡尔算法14.7.1 应用场景-公交站问题看一个应用场景和问题:某城市新增 7 个站点(A, B, C, D, E, F, G) ,现在需要修路把 7 个站点连通各个站点的距离用边线表示(权) ,比如 A – B 距离 12 公里问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?14.7.2 克鲁斯卡尔算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不

2021-10-13 08:33:42 1949

原创 Java用普里姆算法(prim)解决修路最短路径问题

14.6 普里姆算法14.6.1 应用场景-修路问题看一个应用场景和问题:有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?思路: 将 10 条边,连接即可,但是总的里程数不是最小。正确的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少。这个问题我们一会在解决,先来看看普里姆算法相关的东西。1

2021-10-12 09:01:36 3429 3

原创 Java用贪心算法解决集合覆盖问题

14.5 贪心算法14.5.1 应用场景-集合覆盖问题假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号14.5.2 贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。14.5.3 贪心算法最佳应用-集合覆盖假设存在如下表的需要付

2021-10-12 09:01:06 2578 1

原创 Java用KMP算法解决字符串匹配问题

14.4 KMP 算法14.4.1 应用场景-字符串匹配问题字符串匹配问题:有一个字符串 str1= “迪丽热巴 迪丽热巴你你好 迪丽迪丽热巴迪丽热巴你好”,和一个子串 str2=“迪丽热巴你好”现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1先看一下暴力匹配法(不是KMP算法,用暴力匹配和KMP算法做对比)如果用暴力匹配的思路,并假设现在 str1 匹配到 i 位置,子串 str2 匹配到 j 位置,则有:如果当前字符匹配成功(即 s

2021-10-12 09:00:30 2539 2

原创 Java实现用动态规划算法解决背包问题

14.3 动态规划算法14.3.1 动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 ( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )动态规划可以通过填表的方式来逐步

2021-10-12 09:00:08 2965 1

原创 Java实现分治算法解决汉诺塔问题

14.2 分治算法14.2.1 分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择最接近点对问题循环赛日程表 汉诺塔14.2.2

2021-10-12 08:59:13 2369 1

原创 Java实现二分查找算法(非递归)

14.1 二分查找算法(非递归)14.1.1 二分查找算法(非递归)介绍之前发过二分查找算法,是使用递归的方式,下面我们用二分查找算法的非递归方式二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,假设从[0,99]的队列(100 个数,即 n=100)中寻到目标数 30,则需要查找步数为㏒₂100 , 即最多需要查找 7 次( 2^6 < 100 < 2^7)

2021-10-12 08:58:51 2544 1

原创 Java实现图的深度优先遍历(dfs)和广度优先遍历(bfs)完整代码

13.7 图的深度优先遍历(dfs)和广度优先遍历(bfs)完整代码import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.List;/** * @author zk * @version 1.0.0 * @ClassName Grap.java * @Description TODO 图(深度优先遍历和广度优先遍历) * @createTime 20

2021-10-12 08:52:20 2966 1

原创 Java构建图和图的深度优先遍历(dfs)和广度优先遍历(bfs)

13.1 图基本介绍13.1.1 为什么要有图前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图13.1.2 图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:13.1.3 图的常用概念顶点(vertex)边(edge)路径无向图(下图)有向图带权图13.2 图的表示方式图的表示方式有两种:

2021-10-12 08:50:04 2752 1

原创 二叉树与B树、B+树、B*树和2-3树

12.1 二叉树与 B 树12.1.1 二叉树的问题分析二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题:问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响。问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度。12.1.2 多叉树在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每

2021-10-12 08:44:13 2577 1

原创 Java实现创建平衡二叉树(AVL 树)和AVL树的增删改查

11.5 平衡二叉树(AVL 树)11.5.1 看一个案例(说明二叉排序树可能的问题)给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在。 左边 BST 存在的问题分析:左子树全部为空,从形式上看,更像一个单链表。插入速度没有影响。查询速度明显降低(因为需要依次比较), 不能发挥 BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢。解决方案-平衡二叉树(AVL)11.5.2 基本介绍平衡二叉树也叫平衡二叉搜索树(Self-balan

2021-10-12 08:43:41 2501 1

原创 Java实现二叉排序树创建、遍历、增加和删除

11.4 二叉排序树11.4.1 先看一个需求给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加11.4.2 解决方案分析使用数组数组未排序:优点:直接在数组尾添加,速度快。缺点:查找速度慢。数组排序:优点:可以使用二分查找,查找速度快。缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。使用链式存储-链表不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动。咱们下面使用二叉排序树

2021-10-11 09:45:01 3229 3

原创 Java实现赫夫曼编码、解码、文件压缩和解压

11.3 赫夫曼编码11.3.1 基本介绍赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法。赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%~90%之间赫夫曼码是可变字长编码(VLC)的一种。Huffman 于 1952 年提出一种编码方法,称之为最佳编码11.3.2 原理刨析通信领域中信息的处理方式-----赫夫曼编码步骤如下:传输的字符串 i like li

2021-10-11 09:34:55 3489 3

原创 Java实现赫夫曼树的构建和遍历

11.2 赫夫曼树11.2.1 基本介绍给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近11.2.2 赫夫曼树几个重要概念和举例说明路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1,则从根结点到第 L 层

2021-10-11 09:28:08 2955

原创 Java实现堆排序

11.1 堆排序11.1.1 堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,。注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明小顶堆举例说明小顶堆:arr[i] <= arr[2i+1] &&

2021-10-11 09:25:01 2845 1

原创 Java实现线索化二叉树和遍历线索化二叉树

10.3 线索化二叉树10.3.1 先看一个问题将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树. n+1=7问题分析:当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 }但是 6, 8, 10, 14 这几个节点的 左右指针,并没有完全的利用上. 3) 如果我们希望充分的利用 各个节点的左右指针, 让各个节点可以指向自己的前后节点,怎么办?解决方案-----线索二叉树10.3.2 线索二叉树基本介绍n 个结点的二叉链表中含有 n+

2021-10-11 09:05:33 2978 1

原创 顺序存储二叉树--Java数据结构和算法

10.2 顺序存储二叉树10.2.1 顺序存储二叉树的概念基本说明从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看右面的示意图。要求:右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]要求在遍历数组 arr 时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树第 n 个元素的左子节点为 2 * n + 1第 n 个元素的右子节点

2021-10-11 09:05:24 2883

原创 Java实现二叉树的前序、中序和后序的遍历、查找、删除

10.1.4 二叉树遍历的说明使用前序,中序和后序对下面的二叉树进行遍历。前序遍历: 先输出父节点,再遍历左子树和右子树中序遍历: 先遍历左子树,再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点小结: 看输出父节点的顺序,就确定是前序,中序还是后序10.1.5 二叉树遍历应用实例(前序,中序,后序)应用实例的说明和思路代码实现(Java实现二叉树的前序、中序和后序的遍历、查找、删除代码在最下方一块展示)10.1.6 二叉树-查找指定节点要求请编写前

2021-10-11 09:05:17 2984 1

原创 二叉树、满二叉树和完全二叉树--Java数据结构和算法

10.1 二叉树10.1.1 为什么需要树这种数据结构数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 [示意图]画出操作示意图:链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历) 【示意图】操作示意图:

2021-10-11 09:05:07 3352 2

原创 斐波那契(黄金分割法)查找算法--Java数据结构和算法

8.5 斐波那契(黄金分割法)查找算法8.5.1斐波那契(黄金分割法)查找基本介绍黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是 0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。斐波那契数列 {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 } 发现斐波那契数列的两个相邻数 的比例,无限接近 黄金分割值0.6188.5.2斐波那契(黄金分割法)原

2021-10-11 09:04:54 3009 2

原创 哈希表(散列)-Google上机题

9.1 哈希表(散列)-Google 上机题看一个实际需求,google 公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的 id 时,要求查找到该员工的 所有信息。要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)9.2 哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快

2021-10-11 09:03:47 2919 2

原创 插值查找算法--Java数据结构和算法

8.4 插值查找算法插值查找原理介绍:插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, high 表示右边索引 right. key 就是前面我们讲的 findVal3) int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/插值索引/对应前面的代码公式:int mid = left + (

2021-10-09 09:11:28 1813 4

原创 二分查找算法--Java数据结构和算法

8.3 二分查找请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。8.3.1二分查找算法的思路8.3.3二分查找的代码说明:增加了找到所有的满足条件的元素下标:课后思考题: {1,8, 10, 89, 1000, 1000,1234} 当一个有序数组中,有多个相同的数值时,如何将所有的数值都查找到,比如这里的 1000import java.util.ArrayList;impor

2021-10-09 09:09:05 1779 1

原创 Java查找算法有哪些?

8.1 查找算法介绍在 java 中,我们常用的查找有四种:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找8.2 线性查找算法有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。代码实现/** * @author zk * @version 1.0.0 * @ClassName SequenceSearch.java * @Description TODO 顺序查找 *

2021-10-09 09:07:06 1929 2

原创 常用排序算法总结和对比

7.12 常用排序算法总结和对比7.12.1 一张排序算法的比较图7.12.2 相关术语解释稳定:如果 a 原本在 b 前面,而 a=b,排序之后 a 仍然在 b 的前面;不稳定:如果 a 原本在 b 的前面,而 a=b,排序之后 a 可能会出现在 b 的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费的时间。空间复杂度:运行完一个程序所需内存的大小。n: 数据规模k: “桶

2021-10-09 09:00:18 1659

原创 基数排序--Java数据结构和算法

7.11 基数排序7.11.1 基数排序(桶排序)介绍基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法。基数排序(Radix Sort)是桶排序的扩展。基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然

2021-10-09 09:00:07 1710

原创 归并排序--Java数据结构和算法

7.10 归并排序7.10.1 归并排序介绍归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。7.10.2 归并排序思想示意图 1----基本思想7.10.3 归并排序思想示意图 2-合并相邻有序子序列再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最

2021-10-09 08:59:48 1732

原创 快速排序--Java数据结构和算法

7.9 快速排序7.9.1快速排序法介绍快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。7.9.2快速排序法示意图7.9.3快速排序法应用实例要求: 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。【测试 8w数据 和 800w数据的速度】

2021-10-09 08:59:37 1690

原创 希尔排序--Java数据结构和算法

7.8 希尔排序7.8.1简单插入排序存在的问题数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是:{2,3,4,5,6,6}{2,3,4,5,5,6}{2,3,4,4,5,6}{2,3,3,4,5,6}{2,2,3,4,5,6}{1,2,3,4,5,6}结论: 当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响。7.8.2希尔排序法介绍希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排

2021-10-09 08:59:22 1691 1

原创 插入排序--Java数据结构和算法

7.7 插入排序7.7.1 插入排序法介绍插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。7.7.2 插入排序法思想插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。7.7.3 插入排序思路图

2021-10-09 08:59:05 1721

原创 选择排序--Java数据结构和算法

7.6 选择排序7.6.1基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。7.6.2选择排序思想选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]~arr[n-1]中选取最小值,与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2]交换,…,第 i 次从arr[i-1]~

2021-10-09 08:58:41 1674

原创 冒泡排序--Java数据结构和算法

7.5 冒泡排序7.5.1基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行)。7.5.2演示冒泡过程的例子(图解

2021-10-08 13:11:20 1695

原创 Java排序算法

7.1 排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。7.2 排序的分类内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。常见的排序算法分类(见下图)7.3 算法的时间复杂度7.3.1度量一个程序(算法)执行时间的两种方法事后统计的方法:这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需

2021-10-08 13:04:41 1694

原创 递归-八皇后问题(回溯算法)

递归的相关知识请查看上篇文章,点击连接前往【Java数据结构和算法–递归】,在这里就直接解8皇后问题了。6.7 递归-八皇后问题(回溯算法)6.7.1八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92)。6.7.2八皇后问题算法思路分析第一个皇后先放第一行第一列;第二个皇后放在第二行.

2021-10-08 11:03:43 1769 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除