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

浙公网安备 33010602011771号