算法
算法基础以及数据结构
Shine_QianMo
这个作者很懒,什么都没留下…
展开
-
学习笔记-二叉树(三种遍历、三种查找)
二叉树三种遍历:前序遍历的顺序是根节点、左节点、右节点/** * 前序遍历 */ public void preOrder() { if (this.root != null) { this.root.preOrder(); } else { System.out.println("当前二叉树为空无法遍历"); } }/** * 此处为Node的方法 * 前原创 2020-05-12 21:11:15 · 2475 阅读 · 0 评论 -
学习笔记-插值查找
插值查找:插值查找和二分查找的原理差不多只不过是mid值变了。而且是更精准的二分查找mid=left + (Val[right] − Val[left]) / (x − Val[left]) × (right − left)上代码:public static int insertValue(int[] arr, int left, int right, int value) { if (left > right || value < arr[0] || value &g原创 2020-05-11 13:54:31 · 2361 阅读 · 0 评论 -
学习笔记-二分查找
二分查找:二分查找的前提必须是一个有序的数组这里提供两个代码一个是查找一个值的一个下标,另一个是查找一个值的一组下标 /** * 二分查找 注意:前提是该数组是有序的 * @param arr 查找的数组 * @param left 左边索引 * @param right 右边索引 * @param value 要查找的值 * @return 要查找的下标 */ public static int binarySe原创 2020-05-10 11:38:22 · 2298 阅读 · 0 评论 -
学习笔记-基数排序
基数排序原理:判断每个数的个位、十位、百位…然后分别放到对应的桶中(这里的桶一共有10个,分别是{0,1,2,3,4,5,6,7,8,9} 个位如果是1就放到1的桶中),每判断完一位,将数据按顺序(就是从小到大)取出,然后每一位都是这样,上图:数据为arr={53, 3, 542, 748, 14, 214}第一轮:第二轮:第三轮:三轮代码: //为了防止数据溢出大小定义为arr.length //明确空间换时间 int[][] bucke原创 2020-05-09 18:04:41 · 2374 阅读 · 0 评论 -
学习笔记-归并排序
归并排序原理图:代码:public static void main(String[] args) { //int[] arr = {8, 4, 5, 7, 1, 3, 6, 2, 0, 235}; //测试时间 测试时间112mm左右 int[] arr = new int[800000]; int [] temp = new int[arr.length]; for (int a = 0; a < arr.le原创 2020-05-09 17:00:29 · 2361 阅读 · 0 评论 -
学习笔记-希尔算法(交换法和移位法)
希尔排序(交换法)://希尔交换法 public static void jShellSort(int[] arr) { int temp = 0; //第一轮将n个数据分成了arr.length/2组 for (int stap = arr.length / 2; stap > 0; stap /= 2){ for (int i = stap; i < arr.length; i++) {原创 2020-05-08 19:54:09 · 2613 阅读 · 1 评论 -
学习笔记-回溯算法(八皇后问题)暴力法
八皇后问题暴力解决法(介绍代码有说明)先展示结果:我这里用的是一维数组来展示的结果array={7,3,0,2,5,1,6,4}7的下标为0, 在这里下标+1表示的是第几个皇后也是行的位置,array[n]+1的值就是皇后所在列的位置,即:0 0 0 0 1 0 0 00 0 0 0 0 0 1 00 1 0 0 0 0 0 00 0 0 0 0 1 0 00 0 1 0 0 ...原创 2020-05-04 12:40:01 · 2532 阅读 · 0 评论 -
学习笔记-迷宫回溯(递归)
递归的应用-迷宫回溯此代码仅供找到出口,并不能找到最短路径,如果找到纯属巧合。没出口的话会出现3;public class MiGong { public static void main(String[] args) { //县创建一个二维数组模拟迷宫 int[][] map = new int[8][7]; //使用1表示墙 ...原创 2020-04-04 16:51:33 · 2321 阅读 · 0 评论 -
学习笔记-中缀表达式转逆波兰表达式(后缀表达式)
中缀表达式转后缀表达式实现计算器(支持括号以及小数点不支持空白符)思路图:这里的s2栈我直接改为ArrayList因为最后是栈的结果的逆序,用ArrayList即可。ok上代码:public class PolandNotation { public static void main(String[] args) { //定义中缀表达式 String...原创 2020-03-28 15:16:12 · 2456 阅读 · 0 评论 -
学习笔记-单链表实现栈的过程中遇到地址问题
这个代码temp是单链表的头节点;修改temp的同时 l 的值也变了。public void pop(){ Linked temp = l; if (temp.next == null){ throw new RuntimeException("无数据,无法取出"); } Linked value = tem...原创 2020-03-21 14:37:58 · 2375 阅读 · 0 评论 -
学习笔记-用单链表写栈的过程
上一篇文章是用数组写的,这篇用的单链表写的。public class LinkedListStack { public static void main(String[] args) { LinkedStack as = new LinkedStack(); String key = ""; boolean flag = true; ...原创 2020-03-21 14:27:32 · 2286 阅读 · 0 评论 -
学习笔记-用数组写出栈的过程
小白一枚,勿喷。下边上代码栈的过程先入后出,后入先出。public class ArryStack { public static void main(String[] args) { ArrayStack as = new ArrayStack(4); String key = ""; boolean flag = true; ...原创 2020-03-21 14:25:50 · 2178 阅读 · 0 评论 -
学习笔记-约瑟夫问题之环形链表
约瑟夫问题java代码curBoy为辅助节点我测试的是5个人的,最终答案是24153。public class Josepfu { public static void main(String[] args) { CircleSingleLinkedList cs = new CircleSingleLinkedList(); cs.addBoy(5)...原创 2020-03-18 18:09:04 · 2385 阅读 · 0 评论 -
稀疏数组经典案例之五子棋
编写五子棋程序中,会有存盘退出和续上盘的功能。ok,上棋盘转化为二维数组的模样:正常使用二维数组进行存取,会有很多重复数据0,数组的大小也就是11 * 11假如我们用稀疏数组的话,会相应地减少数组大小,当然还是看具体情况。这里我们用另外一个二维数组演示:转成稀疏数组第一行为二维数组的 长 宽 以及 有几个不为默认值的值后续的为每个棋子的坐标以及值(黑棋或白棋)最后介绍二维...原创 2020-03-03 16:15:58 · 2534 阅读 · 1 评论