自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 斐波拉契法(黄金分割法)查找算法-Java实现

和折半查找一样的,需要找到一个mid,mid将分割出左右两部分,而通过斐波拉契数组的规律f[k]=f[k-1] + f[k-2],可以知道f[k-1] + f[k-2]分别为右左两部分的长度值,通过判断待查找值在mid的左还是右边,再使用对应k值,重新求得mid,就可以和折半一样最后找到待查找数的位置。

2024-01-02 19:56:17 370

原创 二分查找和插值查找-Java实现

思想:二分查找必须是针对有序列表的,二分查找顾名思义,就是说每次查找都将一个数组对半分,拿到中间索引mid,然后通过判断需要查找的值(下面简称value)和mid索引在数组中的值(下面简称中间值)的大小关系,如果value大于中间值,也就是说value的位置将会在中间值的右边,那么就需要向右继续使用二分查找,循环往复最后就可以找到。思想:通过value去动态的生成一个索引值,然后获取数组中对应这个索引值的值,通过类似于二分查找的比较去决定向哪一边查找。先计算起始值到目标值的距离,然后除以起始值到结束值。

2024-01-01 20:44:46 321

原创 基数排序-Java实现

基数排序是桶排序的升级版,一个数无疑是由10个数字构成,因此我们创建十个桶。一个数从个位依次向上位次取数,将取到的这个位次数与桶进行匹配,再将这个数放入桶中整个数组完成放入后,再从0桶依次取出,放入原数组然后重复上面的操作,直到位次取完后,排序完成。也就是说第一轮是对个位数排序,第二轮是对十位数,第三轮是对百位数....

2023-12-31 18:17:40 355

原创 归并排序-Java实现

按照大话数据结构的没写完整~_~,对于处理每次迭代末尾的数组有问题,奇数大小的数组的最后一个元素我无法实现归并,就在完成归并后实现了一个直接插入,理论上增加了一定的时间复杂度,因为要移动数据。然后再两两(两个数组)合并,合并的时候分别遍历对应的元素,选择小的放入temp数组中,遍历合并完成后,如果某个数组中还有元素,直接合并到temp数组末尾,最后将temp数组覆盖原数组。可以使用递归或者迭代的方式来实现,大话数据结构中提到迭代消耗时间更少,并且空间占用更少,是递归的优化。

2023-12-30 23:05:12 404 1

原创 快速排序-Java实现

当我们选择基准值的时候,每次都是选择最左边的值,这显然不是很合理,如果最左边是最大值,那么就会导致,当这个值交换到最右边的时候,整个最左边都是小于基准值的元素,递归树就不平衡。(下图取自大话数据结构)第六轮比较:5>4 交换 [2,1,4, 3 ,7, 5 ,8,6,9] 移动左指针 left:arr[3]:3 right:arr[5]:5。第八轮比较:7>5 交换 [2,1,4,3, 5 , 7 ,8,6,9] 移动右指针 left:arr[4]:5 right:arr[4]:5。

2023-12-29 22:41:33 811 1

原创 希尔排序-交换法和位移法-Java实现

希尔排序实际上可以理解为插入排序的升级版,其中加入了折半的思想 希尔排序思想: 1.对待排序数组进行增量分组,其中每组的大小可以理解为增量(步长) 分组的规律应该是越分组越大,比如数组的长度是 10,第一次除 2 后是 5,第二次除 2 取整就是 2,第三次就是 1,最后不能小于等于 0 得到的这个数,就是需要分多少组 2.每次分组后,对每组的数组进行排序(分为交换排序和位移排序(还有一点需要注意,在上面这个数组中,我们每次都是拿0和前面的依次比较,会让我们觉得是0依次和前面的比较,实际上不一定。

2023-12-27 23:48:09 1061 1

原创 插入排序-Kotlin实现

首先取得一个元素,将其和它前面的元素进行比较,也就是说有一个待插入元素,一个待检查元素,它们之间进行比较,如果待插入元素比待检查元素小,那么待检查元素后移,待检查元素索引前移,取得前一个元素继续进行比较,直到待插入元素比待检查元素大,那么表示合适的位置找到,由于每个比待插入元素大的元素都后移过,因此实际上insertIndex(待检查元素索引)的后一位是可以插入的,可以理解为一个空位,因此就可以将其插入。如果到达数组最前面,也就是索引为-1了还是没找到,那么跳出当前循环,进行插入。

2023-12-26 22:15:43 36 1

原创 选择排序-Kotlin实现

对于一个无序的数组,依次从数组中获得元素,然后从这个元素的后一位开始互相进行比较,在比较的过程中,如果有比当前取到的元素小的数,将其记录下来为min,并记录其索引minIndex,直到数组的末尾,该论循环结束,将当前取的值和比较得出最小的值进行交换。这样最小的值就排列到了数组的前面,循环往复即可完成排序。在交换的时候进行判断,如果minIndex还是取到的值的索引,那么不进行交换。

2023-12-26 22:15:06 66 1

原创 冒泡排序及其优化-Java实现

从内层循环入手,因为每次循环都会找到一个最大的数排在最后,如果是第二次循环,那么最后一位肯定已经是最大的了,不需要再进行比较了,因此内层循环只需要比较 [0, array.length - i -1)次,比如第二次内层循环的时候,外层i是1,那么array.length - i - 1就是3,只需要比较[0, 3),每次取两个数,比较3次即可。外层循环次数为[0,array.length-1),如果数组长度为5,那么只需要循环四次即可,因为四次完成后,第一位肯定是最小的了。

2023-12-26 22:14:18 20 1

原创 Java实现全策略迷宫问题并求最短路径

使用Java中的栈来实现,使用一个循环依次将上下左右作为第一位压入栈中。后续元素压入栈的时候,需要判断栈中是否已经存在,如果不存在就压入。通过for依次传递方向组,解析方向组产生递归分支中需要的参数组。通过调用解迷宫方法,并传递参数组,完成解题。先通过排列获取所有的方向组。

2023-12-25 00:59:48 59

原创 中缀表达式转后缀表达式(逆波兰式)及其运算(多位整数的四则运算)-Java

1.2.3 符号栈不为空,并且符号栈栈顶符号优先级>=这个待入栈符号,那么将栈顶符号出栈到表达式栈,持续出栈到栈顶符号优先级小于这个代入栈符号,或者遇到左括号。* 然后依次将List集合的元素,配合符号栈和表达式List集合,分别压栈出栈和add到集合,避免了后续对表达式栈出栈结果的逆序。* 1.3.2 如果是右括号,依次弹出符号栈的符号到表达式栈,直到遇到左括号,此时需要丢弃这一对左右括号。* 1.2.2 符号栈不为空,栈顶符号优先级小于待入栈符号,那么直接入栈。

2023-12-23 00:25:13 42 1

原创 约瑟夫环问题-小孩出圈-Java实现

【代码】约瑟夫环问题-小孩出圈-Java实现。

2023-12-21 23:01:53 25

原创 中缀表达式转后缀表达式并运算(C语言)

代码比较简陋可能存在一些错误,随便写写,没有考虑free。

2023-12-04 18:20:53 32

原创 Java-JDK16的Record

在JDK16中引入了一个特殊的类,Record(记录);其状态不可变,而且公共可读。这个Point的实例字段被称为组件(component)

2023-07-05 22:35:26 195

原创 Java-对象代码块和静态代码块

对象代码块:每个实例被创建的时候,对象代码块中的内容会优先被执行;如果在对象代码块中给实例字段赋值,那么每个实例的这个实例字段都是不一样的。静态代码块:当这个类被加载的时候,静态代码块中的内容就会被执行,并且只执行这一次,不受实例多次创建的影响;

2023-07-05 22:16:15 48

原创 Java-基于类的访问权限

并且,一个类的方法也可以访问这个类的所有对象的私有数据。protected(受保护的):protected修饰符对于同一包中的类和子类是可见的。被protected修饰的成员(字段和方法)可以在同一包中的其他类中访问,也可以在子类中访问。默认访问权限对于同一包中的类是可见的,但对于不同包中的类是不可见的。private(私有的):private修饰符是最严格的访问权限,只有在同一类中才可以访问私有成员(字段和方法)。public(公共的):这是最高级别的访问权限修饰符,对所有类都是可见的。

2023-07-04 21:05:02 551

原创 Java-不要编写返回可变对象引用的访问器方法

可以使用这个方法来设置毫秒数,这样就破坏了封装性。使得当我们没有提供set方法的情况下,也可以修改Date字段的数据。但是这样会产生一个问题,就是这个访问器方法返回的是一个对象,也就会导致当实例化的employee使用getDate方法后,获取到Date字段的引用。因此,我们在设计bean的时候,最好将这种返回可变对象引用的get方法(访问器方法)的内容,修改为返回克隆的对象。在我们创建一个JavaBean的时候,会使用到对象类型的私有字段,并为其提供访问器方法,如getDate();

2023-07-04 17:47:08 95

空空如也

空空如也

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

TA关注的人

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