随笔分类 -  数据结构和算法

数据结构和算法的笔记
摘要:package com.cai.math; /** * 哈希散列 之:数组+链表(这里将要实现的部分) * 哈希散列是一种数据结构 */ public class HashTabLinked { public static void main(String[] args) { // EmpLinke 阅读全文
posted @ 2020-09-30 17:17 就是你baby 阅读(242) 评论(0) 推荐(0)
摘要:package com.cai.math; /** *目标:实现二分查找 和 插值查找 * 前提:两种查找都需要查找对象是一个有序的数组 */ public class BinarySearch { public static void main(String[] args) { int[] arr 阅读全文
posted @ 2020-09-27 11:15 就是你baby 阅读(157) 评论(0) 推荐(0)
摘要:转:https://www.cnblogs.com/mengxiaoleng/p/11755631.html 斐波那契查找算法 什么是斐波那契查找算法? 1.黄金分割点是把一条线段分割成两个部分,使得一部分与全长之比等于另一部分与这一部分之比,取其前三位的近似值大概是0.618。 2.斐波那契数列{ 阅读全文
posted @ 2020-09-27 09:49 就是你baby 阅读(220) 评论(0) 推荐(0)
摘要:归并排序图解: 代码实现: package com.cai.math; import java.util.Arrays; public class MergerSort { public static void main(String[] args) { int[] arr = {14,12,15, 阅读全文
posted @ 2020-09-25 16:08 就是你baby 阅读(118) 评论(0) 推荐(0)
摘要:希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。 基本思想 希尔排序是把记录按 阅读全文
posted @ 2020-09-22 16:57 就是你baby 阅读(1038) 评论(0) 推荐(0)
摘要:package com.cai.learn.math; /** * 8皇后问题运算(回溯算法) * 思路:1.第一个皇后放在第一行,第一列 * 2.第二行皇后放在第二行第一列,然后判断是否OK,如不OK,继续放在第二列,第三列....第8列,找个一个合适的位置 * 3.继续第三个皇后..... * 阅读全文
posted @ 2020-09-19 22:56 就是你baby 阅读(311) 评论(0) 推荐(0)
摘要:package com.cai.learn.math; /** * 迷宫回溯: * 目标:用递归方法达到指定位置 */ public class MazeQuestion { public static void main(String[] args) { //搭建简单的迷宫 int[][] maz 阅读全文
posted @ 2020-09-19 18:31 就是你baby 阅读(178) 评论(0) 推荐(0)
摘要:分析步骤: 实现代码: package com.cai.learn.math; import java.util.ArrayList; import java.util.List; import java.util.Stack; /** * 目标中缀表达式转成后缀表达式 */ public clas 阅读全文
posted @ 2020-09-19 11:33 就是你baby 阅读(182) 评论(0) 推荐(0)
摘要:import java.util.Stack; /** * 目标:实现后缀表达式的基本运算 * 运算规则:1.建立栈 从左到右数字依次入栈 * 2.如果遇到符号,取出栈顶,和次栈顶的数字进行运算(次栈顶数字在操作符前) * 3.直到最后计算出最终结果 */ public class SuffixTe 阅读全文
posted @ 2020-09-18 21:41 就是你baby 阅读(326) 评论(0) 推荐(0)
摘要:package com.cai.math; import java.util.Stack; /** * 目标:java实现直接算出中缀表达式:例:3+2*5-6的值 * 思路:1.分别把数字,和符号放入两个栈中 * 2.如果是数字:直接入数字栈 * 3.如果是符号,当前符号的优先级别小于等于上一个符 阅读全文
posted @ 2020-09-16 15:05 就是你baby 阅读(1704) 评论(0) 推荐(0)
摘要:这里两个while的顺序是不能改变的,想一想: 假设对如下进行排序: 如上图,6在左,9在右 我们将6作为基数。 假设从左边开始(与正确程序正好相反) while (nums[i] <= index && i < j) { i++; } while (nums[j] >= index && j > 阅读全文
posted @ 2020-08-25 10:05 就是你baby 阅读(519) 评论(0) 推荐(0)
摘要:转载:https://blog.csdn.net/shujuelin/article/details/82423852 高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这 阅读全文
posted @ 2020-08-25 10:03 就是你baby 阅读(332) 评论(0) 推荐(0)
摘要:第一轮: 第二轮: 往下省略... //桶排序 public static int[] bucketSort(int[] arr){ //1.取最大 ,最小值 int max=0,min=0; for (int i = 0; i < arr.length; i++) { if(i==0){ max= 阅读全文
posted @ 2020-08-21 16:29 就是你baby 阅读(99) 评论(0) 推荐(0)
摘要:如图显示的是一轮冒泡的结果: //冒泡序 //每一轮的冒泡 都会把大的(最大--第二大--)依次放到最后,所以最多只用循环n-1次(n表示数组元素个数) public static int[] bubblingSort(int[] arr){ for (int i = 0; i < arr.leng 阅读全文
posted @ 2020-08-20 15:23 就是你baby 阅读(85) 评论(0) 推荐(0)
摘要://选择排序 //一轮选出最小排在最前面;二轮选出第二小排在第二; >选出倒数第二排在倒数第二 public static int[] selectSort(int[] arr){ for (int i = 0; i < arr.length-1; i++) { int temp = arr[i]; 阅读全文
posted @ 2020-08-20 14:45 就是你baby 阅读(76) 评论(0) 推荐(0)
摘要:个人理解的插入排序: public class Algorithim { public static void main(String[] args) { int[] arr = {4,5,1,3,2}; insertSort(arr); } //插入排序 //从左→右依次处理对应数字所在位置(直到 阅读全文
posted @ 2020-08-20 11:10 就是你baby 阅读(124) 评论(0) 推荐(0)
摘要:import java.util.ArrayList; import java.util.List; public class JosephusProblem2 { public static void main(String[] args) { //lis: 1 2 3 4 5 6 7 8 int 阅读全文
posted @ 2020-08-14 14:56 就是你baby 阅读(266) 评论(0) 推荐(0)
摘要:/** * 有这样一个问题,有N个人围成一圈做游戏,编号为1->2->3->...->1, * 让第m个人开始报数,报到底k个数的那个人出队,出队的下一个人继续报数, * 报到第k个数的人再出队。。。以此类推,求出最后一个出队的人。 */ public class JosephusProblem { 阅读全文
posted @ 2020-08-14 10:01 就是你baby 阅读(132) 评论(0) 推荐(0)
摘要:java简单代码: //双向链表 public class DoubleLinkedDemo { public static void main(String[] args) { Student stu1 = new Student(0, "苏珊", "女"); Student stu2 = new 阅读全文
posted @ 2020-08-13 09:08 就是你baby 阅读(211) 评论(0) 推荐(0)
摘要:链表反转思路: 1.单链表中有效节点的个数 2.查找单链表中弟第k个节点 3.单链表的反转 实现代码如下: public class TestLink { public static void main(String[] args) { //先创建节点 HeroNode hero1 = new He 阅读全文
posted @ 2020-08-05 00:03 就是你baby 阅读(149) 评论(0) 推荐(0)