- 博客(16)
- 收藏
- 关注
原创 浅谈二分查找
一、二分查找的思想二分查找是一种生活中随处可见的查找算法。不知道大家有没有玩过猜数字这样的游戏。我随机想一个1-100之间的数据,然后让别人猜我想的数字。每猜一次我都会告诉他是猜大了还是猜小了,知道猜中为止。我想不会有人从1开始一直猜到100吧,聪明的人都会取一个中间值也就是从50开始猜起,如果猜大了,那么我们考虑的区间就会变成1-49,如果猜小了,我们考虑的区间就会变成51-100。运用这种思想我们每次猜测过后,所需要考虑的区间就会减少一半。怎么样,是不是很节省时间呢?再比如有100个价格不同的商品,
2021-01-31 11:50:19 233
原创 浅谈基数排序
浅谈桶排序浅谈计数排序之前的文章中介绍了两种时间复杂度为O(n)的排序算法,在今天的文章中我们再来介绍第三种时间复杂度为O(n)的排序算法–基数排序。首先现在思考这样一个问题,假设我们有100万个手机号码,我们需要做的是对这100万个手机号码进行排序,该从何入手呢?如果使用快速排序,时间复杂度可以做到O(nlogn),那么能否进一步优化,把时间复杂度降到更低呢?可能有朋友会觉得之前介绍过的桶排序、计数排序可以把时间复杂度降到O(n)。但是我们来思考一下,如果使用桶排序和计数排序,对于这么大的数据量,
2021-01-22 13:34:44 372
原创 浅谈计数排序
浅谈桶排序 上一篇文章中我们讲到了一种时间复杂度为O(n)的排序算法–桶排序,今天我们来分析一下另一种时间复杂度为O(n)的排序算法–计数排序。一、计数排序的原理计数排序实际上是桶排序的一种延伸。在桶排序中,我们把要排序的n个数据均匀的分配到了m个桶中。而计数排序是当我们要排序的n个数据范围不大的时候,我们可以将n个数分配到n个桶中。这样每个桶中存储的都是相同的数据,省去了桶内的快速排序,从而节省了时间。比如说我们每个人都经历过的高考,在查询成绩的时候我们可以看到自己的成绩以及所在省的排名。那么查分
2021-01-21 09:04:37 248
原创 浅谈桶排序
浅谈冒泡排序浅谈插入排序浅谈选择排序浅谈归并排序浅谈快速排序之前的文章介绍了时间复杂度为O(n²)的冒泡排序、插入排序和选择排序,以及时间复杂度为O(nlogn)的归并排序、快速排序。接下来的几篇文章,我们回来谈一谈时间复杂度为O(n)的排序算法:桶排序、计数排序、基数排序。因为这类算法的时间复杂度是线性的,所以我们又可以称这些排序算法为线性排序。主要原因在于这三种算法不涉及元素之间的比较操作。下面一起来走进今天的内容:桶排序看到名字,桶排序,我们可以大致根据字面意思理解为用到桶的排序算法。它
2021-01-19 21:17:04 743
原创 浅谈快速排序
浅谈归并排序在上一篇文章中,简单介绍了归并排序。归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。今天来介绍另一种时间复杂度同为O(nlogn)的常见排序算法–快速排序。快速排序的原理快速排序与归并排序一样,利用的都为分治思想。如果不细看的话,归并排序和快速排序其实差别并不是很大。但是二者的思路却是完全不一样的。这里我们首先先来说一下快速排序的核心思想。p快排的思想是这样的:如果要对数组中下标为p到r之间的元素进行排序,我们并不是像归并排序一样,选择p到r的中间点作为分割点,而是从其中
2021-01-17 21:42:57 154
原创 浅谈归并排序
浅谈冒泡排序浅谈插入排序浅谈选择排序在之前的文章中介绍了三种时间复杂度为O(n²)的排序算法,由于时间复杂度比较高,所以这三种算法适合数据规模比较小的排序。为此接下来将会介绍两种时间复杂度为O(nlogn)的排序算法,归并排序和快速排序。这两种排序比较常见于大规模的数据排序中。今天这篇文章我们先来讲解归并排序。一、归并排序的原理归并排序的原理很好理解,它运用了分治的思想和递归方法的实现。首先把一个数组拆分成两部分,然后对这两部分运用递归的方法拆分成更小的两部分,直到不能拆分为更小的单元为止,拆分做
2021-01-12 19:59:58 1094
原创 浅谈选择排序
浅谈冒泡排序浅谈插入排序前两篇文章中已经介绍过冒泡排序和插入排序,它们的时间复杂度都为O(n²),今天这篇文章将会介绍另一种时间复杂度为O(n²)的排序算法–选择排序。这种算法的实现思路与插入排序类似,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。选择排序的原理如下图所示:对应的代码如下:public static void selectionSort(int[] a, int n) { if (n <= 1) retu
2021-01-10 21:19:44 147
原创 浅谈插入排序
浅谈冒泡排序上一篇文章中讲解了冒泡排序,冒泡排序无论是最好、最坏还是平均情况下时间复杂度都是O(n²),而且是原地稳定的排序算法。这篇文章中将会介绍另一种时间复杂度为O(n²),与冒泡排序同为原地稳定的排序算法–插入排序。我们可能会产生这种疑惑,各项指标都一样,我们为什么要引入插入排序算法呢?下面我们带着问题来进入今天的讲解插入排序的思想如下:我们要把6这个元素插入到一个数组中,首先需要根据元素之间的大小找到元素6要插入的位置,然后把这个位置之后的7、9、11、13这几个元素一次向后挪动一个位置,最后
2021-01-09 21:21:58 188
原创 SSM项目常用依赖
为了方便使用,记录一下常用依赖 <dependencies> <!--常用日志 slf4j、log4j、logback、common-logging--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</versio
2021-01-05 09:51:41 331 1
原创 浅谈冒泡排序
冒泡排序只会操作相邻的两个数据,即比较和交换。执行一次冒泡操作会至少让一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。我们来举个例子,现在有一个数组,元素分别为5、1、4、3、2,第一次冒泡操作的详细过程如下图所示。经过一次冒泡,5这个元素到了a[4]的位置。每次排序就好像水底的泡泡一样,大的泡泡逐渐往上冒,所以称之为冒泡排序。接下来只需要再进行4次冒泡操作就可以使整个数组的元素从小到大排好序了。在实际的代码中,我们为了减少时间复杂度,可以考虑这样一种情况,当我们进行完一次冒泡操
2021-01-04 17:01:30 216
原创 浅谈排序算法--排序算法的分析
排序对于任何接触过程序的人来说都不会陌生。在大部分的编程语言中也提供了排序函数。常用的排序算法有:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。1.如何分析一个算法1.排序算法的执行效率对于排序算法的执行效率,一般从下面几个方面来分析(1)最好情况、最坏情况、平均情况时间复杂度为什么要区分这三种时间复杂度呢?第一,有些排序算法会区分,为了好对比,所以我们最好都做一下区分。第二,对于要排序的数据,有的接近有序,有的完全无序。有序度不同的数据,对于排序的执行时间肯定
2021-01-02 21:14:23 410
原创 浅谈数据结构--红黑树
浅谈数据结构–树(1)浅谈数据结构–二叉查找树(2)前两篇文章介绍了树、二叉树、二叉搜索树。其中二叉查找树(二叉搜索树)最为常见,但是二叉树在动态更新的过程中会导致左右子树不平衡。在极端的情况下二叉搜索树会退化为链表,时间复杂度从O(logn)退化为O(n)。为了解决这个问题,一种新的树–平衡二叉查找树(BST)出现了,而红黑树是最长用的一种平衡二叉查找树。1、平衡二叉查找树平衡二叉树非平衡二叉树何为平衡二叉树呢?我们首先来看一下它的定义:二叉树中任意一个节点的左右子树的高度相差不能大于1。
2021-01-01 20:37:41 144
原创 浅谈数据结构--二插查找树
一、二插查找树浅谈数据结构之–树(1)在上一篇的文章中,介绍了树、二叉树、以及二叉树的遍历的相关知识。本文将介绍一种特殊的二叉树,二叉查找树。这种数据结构支持动态数据集合的快速插入、删除、查找操作。二叉查找树又称二叉搜索树,通过字面意思我们可以了解到,这种数据结构是为了实现快速查找而应运而生的。不过,它不仅仅支持快速查找,而且还支持快速插入和删除一个数据。二叉查找树的要求: 在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值。如下图所示二、二
2020-12-29 20:34:52 188 3
原创 浅谈数据结构--树
树(Tree)一、相关概念“树”这种数据结构与我们现实中的树十分相似,是一种非线性的数据结构。里面的每个元素我们称之为节点,这里有几个概念:父节点、子节点、兄弟节点、根节点、叶子节点。根据字面意思对照上图是否可以大致理解这几个概念呢?父节点:图中的A、B、C、F节点都可以称为父节点子节点:父节点向下延伸的节点,一个父节点可以有多个子节点,如A节点的子节点为B、C节点兄弟节点:就是属于同一个父节点的子节点,如图中G、H节点同属于C节点,则G、H节点互为兄弟节点根节点:毫无疑问最上边的节点A称为
2020-12-25 11:35:33 175
原创 Java中的异常处理
异常最近学习了关于异常的知识,进行一下总结假设一个Java程序在运行过程中出现了错误,用户希望程序能够采用一些理智的行为来处理,程序应该:1.返回到一种安全的状态,并能够让用户执行一些其他的命令2.允许用户保存所有的操作结果,并以适当的方式终止程序程序中可能出现的错误一般有一下4种:1.用户输入错误除了那些不可避免的键盘输入错误外,还包括用户输入的语法错误2.设备错误硬件出现问题3.物理限制磁盘满了,可用存储空间已被用完4.代码错误程序方法有可能无法正确执行1.异常分类先上一张
2020-10-17 21:51:02 131 1
原创 Java字节码的前世今生
对于Java平台理解1.Java语言的跨平台特性2.Java是编译执行与解释执行共存的语言合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入1.Java语言的跨平台特性首先Java语言的跨平台特性与JVM(Java虚拟机)密不可分。我们平时
2020-10-16 20:13:53 156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人