数据结构与算法
aa蓝焰
这个作者很懒,什么都没留下…
展开
-
二叉树的遍历
二叉树 前序遍历 中序遍历 后序遍历原创 2022-03-02 22:55:56 · 290 阅读 · 0 评论 -
图解斐波那契搜索并使用java实现
斐波那契查找是在二分查找之上进行了优化 将查找系数0.5换成了接近黄金分割比的系数 假设有一个裴波那契数组int[] F和一个要进行搜索的数组int[] arr; arr.length = F[F.length -1] 即数组的长度等于裴波那契数组最后一个值 在契数列中任意一个值F[k] F[k - 2]/F[k - 1]近似于于黄金分割比 即数字F[k] 的近似黄金分割点为 F[k - 1] 将二分查找的中间系数改为 int middle = left + F[k - 1] -1 ; //因为数组从0开始原创 2020-05-16 19:40:32 · 205 阅读 · 0 评论 -
实现归并排序java(分治与递归)
// 归并排序的基本思想是分治 // 将数组分成两个部分,然后将左右数组按大小进行排序并返回新的数组 // 归并方法用用到了递归,终止递归的条件是当数组只有一个元素的时候停止 // 为了标记左右数组需要两个指针分别记录做数组的起始位置和右数组的起始位置 // 实际上只要知道数组最右面值的下标也可以获取到右数组的起始位置,所以只需要传入数组的起始位置和末尾位置即可 public static int[] mergeSort(int[] arr, int left, int right) { /.原创 2020-05-14 18:29:20 · 240 阅读 · 0 评论 -
图解希尔排序并利用Java实现
// 希尔排序 public class ShellSort { public static void main(String[] args) { int[] array = {12,98,23,56,3,59,2}; for (int i = 0; i < array.length; i++) { System.out.print(array[i]+","); } ...原创 2020-04-24 23:40:03 · 161 阅读 · 0 评论 -
图解插入排序并利用Java实现
1.什么是插入排序 插入排序的基本思想就是先在数组中划分出一个有序的区域,然后将按无序区域的数按顺序插入到有序的区域中 一般会指定数组的第一个数字或者最后一个数字作为最开始的有序区域,只有一个数字那么必然是有序的 2.图解 3.代码实现 接下来用完整的代码实现插入排序并做测试 public class InsertSort2 { public static void main(String...原创 2020-04-23 15:23:16 · 210 阅读 · 0 评论 -
选择排序图解并利用Java实现
选择排序是在冒泡基础上有一定的优化 将数组的第一个值分别与之后的每个值进行比较,找到最大的值然后交换位置 然后从第二个值开始分别与之后的每个值进行比较,找到剩下的值中最大的然后交换 这个过程一直持续到最后一个元素。 接下来通过画图来展示这个过程 代码实现 // 选择排序 public class SelectionSort { public static void main(String[]...原创 2020-04-21 21:26:43 · 188 阅读 · 0 评论 -
Java实现循环列表
public class deque { int maxSize; // 表示队列的最大容量 int front; // 表示队列的头部也就是队列的第一个元素 int rear; // 表示队列的尾部即队列的最后一个数字 int[] deque; // 用来充当队列的容器 public deque() { } // 空参构造 // 带参构造用来创建指定容量的队列容器 publ...原创 2020-04-12 10:36:43 · 773 阅读 · 0 评论 -
Java实现循环链表并解决约瑟夫问题
第一步创建一个结点类 public class ListNode { // 一个链表包括结点 以及增删该查的方法 // 每个结点包含一个id一个value以及nextNode存储下一个结点对象 private int id; // 用来标识结点 private String value; // 存储数据 // 每个链表在创建后必须包含一个头结点 public ListNode ne...原创 2020-04-15 09:59:04 · 165 阅读 · 0 评论 -
Java利用栈实现中缀表达式转后缀表达式
先说明一下具体实现的步骤 中缀表达式a + b*c + (d * e + f) * g,其转换成后缀表达式则为a b c * + d e * f + g * +。 1)如果遇到操作数,我们就直接将其输出。 2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。 3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。 4)如果...原创 2020-04-17 10:51:40 · 308 阅读 · 0 评论 -
Java使用递归完成迷宫探路
1.利用二维数组创建一个地图map[][]; 做出以下约定: 坐标值为1表示墙壁 坐标值为0表示没有探测过的地方 坐标值为2表示探测过的地方 设定一个开始坐标,表示探测器在地图上的初始位置 设置初始的地图如上图,这里我随机添加了几个障碍 设置map[1][1]为起始点 设置map[6][6]为终点,当探测器走到这个点的时候代表探测完成 实现代码如下 public class Labyrint...原创 2020-04-18 08:45:22 · 168 阅读 · 0 评论 -
Java回溯完成八皇后问题
八皇后问题 一个古老而著名的问题,是回溯算法的典型案例。该问题由国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 这里我们创建一个一维数组map来代表棋盘并约定如下 map[x]代表第几列,x代表第几行,下标都是从零开始 完成这个问题需要创建一个方法用来检查,当前棋子是...原创 2020-04-19 11:08:05 · 129 阅读 · 0 评论 -
冒泡排序图解并通过Java实现
冒泡算法图示 重复以上的步骤只到排序完毕,下面通过具体的代码来实现冒泡排序 // 利用冒泡算法实现数组排序 public class BubbleSort { public static void main(String[] args) { int[] array = {2,43,5,34,7,8,4,34,56,8,234}; for (int i = 0; i < arra...原创 2020-04-20 18:55:23 · 227 阅读 · 0 评论