Java数据结构与算法
文章平均质量分 56
Singcing
夏天好热,冰淇淋好凉,我要在冬天吃冰糖
展开
-
求第k小的数
Java求第k小的数原创 2024-03-16 15:29:58 · 215 阅读 · 0 评论 -
Java实现归并排序
Java实现归并排序原创 2024-03-13 20:43:35 · 88 阅读 · 0 评论 -
Java 实现基数排序
Java实现基数排序,在B站韩老师处学习的原创 2022-06-02 15:09:03 · 339 阅读 · 0 评论 -
java 实现快速排序
1.介绍快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序 过程可以递归进行,以此达到整个数据变成有序序列。2.切分原理切分原理: 把一个数组切分成两个子数组的基本思想:1.找一个基准值,用两个指针分别指向数组的头部和尾部;2.先从尾部向头部开始搜索一个比基准值小或等于的元素,搜索到即停止,并记录指针的位置;3.再从头部向尾..原创 2022-05-30 12:02:59 · 14424 阅读 · 2 评论 -
Java实现希尔排序
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}结论: 当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响.2.介绍希尔排序法介绍希尔排序是希尔(Donald Shell)..原创 2022-05-22 00:55:20 · 177 阅读 · 0 评论 -
冒泡、选择、插入排序
冒牌排序代码实现import java.time.Duration;import java.time.LocalTime;public class BubbleSort { public static void main(String[] args) {// test1(); test2(); } public static void test1() { int len=15; int arr[]=new int [len]; for(int ..原创 2022-05-19 14:21:51 · 185 阅读 · 0 评论 -
算法时间复杂度
了解算法时间复杂度原创 2022-05-19 10:35:34 · 148 阅读 · 0 评论 -
八皇后问题
1.介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。2.思路(1) 用一维数组表示皇后的拜访,数组arr,它的下标i (i从0开始) 表示第 i个皇后放在了第i行某个位置,arr[i]=val,表示第i个皇后放在第i行的第val(val从0开始)列(2) 用(x1,y1),(x2,y2) 表示两个皇原创 2022-05-18 01:52:05 · 87 阅读 · 0 评论 -
递归(回溯问题)解决迷宫
1.迷宫问题说明: 1)小球得到的路径,和程序员设置的找路策略有关即:找路的上下左右的顺序相关3)测试回溯现象代码实现public class Maze { public static void main(String[] args) { //二维数据模拟迷宫 int map[][]=new int [8][7]; //使用1 表示墙 //上下设为1 for(int i=0;i<7;i++) { map[0][i]=1; map[原创 2022-05-18 00:46:22 · 139 阅读 · 0 评论 -
中缀表达式转后缀表达式
1.后缀表达式介绍(1) 后缀表达式又称逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后(2) 中举例说明: (3+4)×5-6 对应的后缀表达式就是 3 4 + 5 × 6 –(3)再比如: 正常的表达式 逆波兰表达式 a+b a b + a+(b-c) a b c - + a+(b-c)*d a b c – d * +原创 2022-05-17 23:42:12 · 239 阅读 · 0 评论 -
Java解决约瑟夫问题
1.介绍问题:n 个人围成一圈,从第一个人开始报数,数到 mm 的人出列,再由下一个人重新从 11 开始报数,数到 mm 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。问题来源:约瑟夫问题 - 洛谷https://www.luogu.com.cn/problem/P1996说明:本次代码中为图方便,使用了jdk自带的队列。这题也可以借助数组模拟的队列或双端链表模拟的队列来做。代码实现import java.util.LinkedList;imp...原创 2022-05-02 12:54:40 · 994 阅读 · 0 评论 -
Java用数组模拟栈
1.思路实现 栈的 思路分析1. 使用数组来模拟栈2. 定义一个 top 来表示栈顶,初始化 为 -13. 入栈的操作,当有数据加入到栈时, top++; stack[top] = data;4. 出栈的操作, int value = stack[top]; top--, return value2.代码实现public class ArrayStack { private int maxSize; //栈的大小 private int [] ...原创 2022-05-02 11:47:29 · 791 阅读 · 0 评论 -
Java实现双向链表
1.介绍使用带head头的双向链表实现管理单向链表的缺点分析:(1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。(2)单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到temp,temp是待删除节点的前一个节点(3)示意图帮助理解删除 2.代码实现public class DoubleList { //初始化头节点,不存放具体的数据 private Node head=new Node.原创 2022-04-30 23:07:23 · 1085 阅读 · 0 评论 -
Java实现单链表
1. 介绍链表是有序的列表,但是它在内存中是存储如下小结:(1)链表是以节点的方式来存储,是链式存储(2)每个节点包含 data 域, next 域:指向下一个节点.(3)如图:发现链表的各个节点不一定是连续存储.(4)链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定2. 思路a 在链表尾部添加节点(1). 用temp变量从head节点开始,遍历。找到temp.next为空的位置。(2) 把新节点放到temp.next位置b 按...原创 2022-04-30 19:59:25 · 950 阅读 · 0 评论 -
数组模拟循环队列
1.介绍·队列是一个有序列表,可以用数组或是链表来实现。·遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出·示意图:(使用数组模拟队列示意图)图片来源:数据结构——循环队列(GIF图解)_wyq小白的博客-CSDN博客_循环队列示意图一、循环队列数组队列的出队操作的复杂度是O(n),性能很差,解决方法就是使用循环队列(Loop Queue)在循环队列中,需要对队为空和队为满的时候进行判断,为了区分队空和队满两个条件,需要浪费capacity一个空间,让rear指针.原创 2022-04-30 18:42:24 · 338 阅读 · 0 评论 -
稀疏数组_Java实现
Java实现稀疏数组原创 2022-04-19 00:00:21 · 74 阅读 · 0 评论