数据结构
文章平均质量分 90
代码大师麦克劳瑞
代码小学生,记录平时点滴,欢迎大家指正
展开
-
设计模式-工厂模式实战
Spring的BeanFactory和ApplicationContext是工厂模式的实际应用示例,它们用于创建和管理Spring中的Bean对象。抽象工厂模式(Abstract Factory Pattern)进一步抽象了工厂模式,它包括多个工厂接口和多个具体工厂,每个具体工厂负责创建一组相关的产品。工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但将对象的实际创建委托给具体的子类或实现类。工厂模式是一种对象创建模式,它将对象的创建过程抽象化,并将实际的创建过程推迟到子类或实现类。原创 2024-01-01 00:00:00 · 957 阅读 · 0 评论 -
设计模式-单例模式实战
这种设计确保了在整个应用程序中只有一个运行时实例,因为 currentRuntime 在类加载时就被创建,并且构造函数是私有的,外部代码无法创建新的实例。这是一种有效的方式,以确保只有一个全局运行时环境,以便执行与运行时环境相关的操作,如执行外部进程、获取系统信息等。然而,在使用单例模式时,应慎重考虑,确保它真正符合应用程序的需求。单例模式是一种创建型设计模式,用于确保一个类只有一个实例,且提供全局访问点以访问该实例。原理:在类加载时,即实例化前,实例变量就已经被分配内存,因此保证了线程安全。原创 2023-11-22 11:59:29 · 847 阅读 · 0 评论 -
数据结构-深度优先搜索Java实现
深度优先搜索(DFS)是一种在图或树中进行搜索的算法,它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都已探寻过,搜索将回溯到发现节点v的那条边的起始节点。它的优点在于空间复杂度相对较小,可以处理大规模的数据,同时可以避免搜索冗余的节点。无论采用递归还是非递归方式,深度优先搜索的关键思想是深入到尽可能深的层级,直到无法再深入为止,然后回溯到上一个节点,继续探索。此外,DFS如同数据结构中的栈结构,是一种后进先出的结构,导致了所有的点进入栈时有一个顺序,我们称之为 “DFS序”。原创 2023-11-22 11:58:10 · 594 阅读 · 0 评论 -
数据结构-线性搜索Java实现
它逐一遍历数据,依次比较每个元素,直到找到目标元素或遍历完整个数据集。虽然它的时间复杂度是O(n),相对于更高效的算法如二分搜索,但线性搜索在小型数据集或无序数据中仍然是一种有用的工具。初始时,我们有一个循环变量 i,通常设置为0,用于遍历数组中的元素。我们还有一个目标元素 target,即要查找的元素。我们将当前遍历到的元素 arr[i] 与目标元素 8 进行比较。如果当前元素不等于目标元素,我们将循环变量 i 递增,移动到下一个元素。如果当前元素不等于目标元素,继续递增循环变量 i,移动到下一个元素。原创 2023-10-31 16:55:40 · 188 阅读 · 0 评论 -
数据结构-二分查找Java实现
现在,我们计算中间元素的索引。(left + right) / 2 为 (0 + 9) / 2,所以中间元素的索引为 4。由于目标元素在中间元素的右侧,我们将 left 更新为 mid + 1。计算新的中间元素, (left + right) / 2 为 (5 + 9) / 2,中间元素的索引为 7。计算新的中间元素, (left + right) / 2 为 (5 + 6) / 2,中间元素的索引为 5。初始时,我们有两个指针,left 指向数组的起始位置,right 指向数组的结束位置。原创 2023-10-31 16:53:57 · 282 阅读 · 0 评论 -
数据结构-堆排序Java实现
堆排序的核心是构建和维护堆,确保最大(或最小)元素位于根节点,然后将根节点与数组末尾的元素交换,并逐渐减小堆的大小。在最大堆中,根节点的值是最大的,而在最小堆中,根节点的值是最小的。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。第一步是将这个数组构建成一个最大堆,确保堆的性质:每个父节点的值都大于或等于其子节点的值。堆化过程:从根节点开始,比较它与其子节点的值,如果子节点的值更大,则交换它们,然后继续堆化子节点。减小堆的大小,排除最后一个元素。原创 2023-10-19 10:30:34 · 869 阅读 · 0 评论 -
数据结构-归并排序Java实现
归并排序是一种建立在归并操作上的有效、稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。原创 2023-10-18 10:23:02 · 976 阅读 · 0 评论 -
数据结构-快速排序Java实现
快速排序的核心思想是选择一个基准元素,将数组分为两个子数组:一个包含所有小于基准的元素,一个包含所有大于基准的元素。在分区步骤中,我们将数组中的元素重新排列,将小于基准的元素移到基准的左边,将大于基准的元素移到基准的右边,基准元素本身位于中间。在这个例子中,左边的子数组 [11, 12, 22, 25, 34] 与右边的子数组 [90] 合并成了整个已排序的数组。在快速排序的第一步,我们需要选择一个基准元素。我们从数组的左边和右边分别开始,分别找到一个比基准元素大的元素和一个比基准元素小的元素。原创 2023-10-18 10:16:07 · 336 阅读 · 0 评论 -
数据结构-插入排序Java实现
插入排序是一种基本的比较排序算法,其核心思想是将数组分为已排序和未排序两部分,然后逐个将未排序的元素插入到已排序部分的适当位置。插入排序的时间复杂度为O(n^2),适用于小型数据集或接近有序的数据。它首先定义了一个包含整数数组的示例,然后调用 insertionSort 方法来对数组进行排序。insertionSort 方法通过将未排序部分的元素插入已排序部分的适当位置来实现插入排序。插入排序的关键思想是在未排序部分中选择元素,然后将其插入到已排序部分的适当位置,以构建有序数组。原创 2023-10-17 10:13:24 · 525 阅读 · 2 评论 -
数据结构-选择排序Java实现
选择排序的关键思想是不断选择未排序部分中的最小元素,并将其放在已排序部分的末尾。虽然选择排序不是最高效的排序算法,但它是一种简单而直观的算法,适用于小型数据集或用于教育目的。选择排序是一种基本的比较排序算法,其思想非常直观:它从未排序的元素中选择最小的元素,然后将其放到已排序的部分的末尾。它首先定义了一个包含整数数组的示例,然后调用 selectionSort 方法来对数组进行排序。selectionSort 方法通过找到未排序部分的最小元素,并与未排序部分的第一个元素交换位置来实现选择排序。原创 2023-10-17 09:51:53 · 464 阅读 · 2 评论 -
数据结构-冒泡排序Java实现
在每一轮循环结束后,检查是否发生了交换,如果没有交换发生,表示数组已经排序好,可以提前退出循环。冒泡排序是一种基础的比较排序算法,它的思想很简单:重复地遍历待排序的元素列表,比较相邻元素,如果它们的顺序不正确,则交换它们。该算法采用嵌套的for循环,外层循环用于遍历整个数组,内层循环用于比较相邻的元素并进行交换,直到整个数组都被排序完成。冒泡排序算法会在每一轮中将一个最大的元素 “冒泡” 到数组的末尾,这就是为什么它被称为冒泡排序。算法不断重复这个过程,直到没有需要交换的元素,这时数组已经排好序。原创 2023-10-16 15:56:19 · 1262 阅读 · 1 评论 -
分布式主键算法
简单高效:雪花算法是一种相对简单且高效的算法,易于实现。全局唯一:生成的ID在分布式环境中是全局唯一的。有序性:ID的生成是有序的,有助于提高数据库索引性能。雪花算法(Snowflake Algorithm)是一种用于分布式系统中生成唯一标识符的算法,由Twitter开发。它通过将一个64位的整数ID分为不同的部分,确保在分布式环境中生成的ID不会重复。本文将详细介绍雪花算法的工作原理和结构。雪花算法是一种可靠且高效的分布式主键生成算法,已在实际生产中得到广泛应用。原创 2023-10-01 13:20:43 · 975 阅读 · 2 评论 -
设计模式-建造者模式
定义定义虽然基本没有屌用,因为大部分人都看不懂,但是还的说出来。。。The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process can create different representations.将一个复杂对象的构建与其表示分离,使得同样原创 2021-12-28 22:44:44 · 748 阅读 · 2 评论 -
【转载】二叉树的四种遍历--前序、中序、后序 +层序
一、易懂的形象理解 其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~ 先用我想的一种简单易懂的形象思维理解一下前序、中序、后序 +层序! 1、先序遍历 先序遍历可以想象成,小人从树根开始绕着整棵树的外...原创 2021-09-24 16:09:10 · 1038 阅读 · 0 评论