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

摘要:之前的归并排序称为自顶向下,将一个大的数组一步步的拆分为小的区间,分别进行排序,最后再合并 也可以将数组的元素拆分为n个区间,每次只对相邻的两个子区间排序,子区间的元素个数依次递增为1、2、4、8...直到最后合成一个完整数组 这种从小区间组合成大数组的方式,称为自底向上排序(Bottom to U 阅读全文
posted @ 2021-10-20 23:30 振袖秋枫问红叶 阅读(305) 评论(0) 推荐(0)
摘要:优化一:对有序数组排序的优化 在每次合并两个子数组前进行判断,如果左边数组的最大值都小于右边数组的最小值,就不用进行合并操作 对于完全有序的数组,递归树中每层都不用进行合并,最后一层叶子节点需要操作的次数是n,其上一层为1/2n,1/4n...最后总共需要操作的次数为2n 因此对于完全有序的数组,归 阅读全文
posted @ 2021-10-20 15:38 振袖秋枫问红叶 阅读(171) 评论(0) 推荐(0)
摘要:归并排序法是一种高级排序算法 核心思想:归并排序法是一种分治算法,将一个数组递归的一分为二,二分为四...定义一个merge()方法对两个子数组分别进行遍历比较,选出较小的元素放在前面,最终完成排序 递归实现归并排序法 import java.util.Arrays; public class Al 阅读全文
posted @ 2021-10-19 19:55 振袖秋枫问红叶 阅读(69) 评论(0) 推荐(0)
摘要:递归的思路 public class Algorithm { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8}; System.out.println(sum(arr)); } public s 阅读全文
posted @ 2021-10-17 23:38 振袖秋枫问红叶 阅读(69) 评论(0) 推荐(0)
摘要:动态数据结构 动态数组、栈和队列的底层仍依托静态数组来实现,通过定义一个resize()方法解决固定容量问题 而链接是真正的动态数据结构,学习的同时也可以更深入的理解引用(指针)和递归 单链表的实现 数据存储在“节点”(Node)中,每个节点拥有value和next两个属性,next为指向下一个节点 阅读全文
posted @ 2021-10-16 15:05 振袖秋枫问红叶 阅读(120) 评论(0) 推荐(0)
摘要:队列也是一种线性结构,从一端(队尾)添加元素,从另一端(队首)取出元素 先进先出(First In First Out) 数组实现队列 常用方法为enqueue()、dequeue()、getFront()、getSize()、isEmpty() public class Algorithm { p 阅读全文
posted @ 2021-10-15 22:18 振袖秋枫问红叶 阅读(70) 评论(0) 推荐(0)
摘要:栈的应用 栈是一种线性结构,只能从一端添加元素(入栈),也只能从这一端取出元素(出栈),这一端称为栈顶 后进先出(Last In First Out) 编辑器:撤销操作 操作系统:系统调用栈 编译器:括号匹配 数组实现栈 栈和队列的底层有多种实现的方式,用数组实现是其中一种 常用方法为push()、 阅读全文
posted @ 2021-10-14 10:35 振袖秋枫问红叶 阅读(64) 评论(0) 推荐(0)
摘要:数据结构的分类 线性结构 动态数组、栈、队列、链表、哈希表等 树结构 二叉树、二分搜索树、AVL、红黑树、堆、B类树、哈夫曼树等 图结构 邻接矩阵、领接表 静态数组 数组最大的优点是可以根据索引快速查询,索引最好有实际的语意,否则最好使用别的数据结构 Java自带数组的索引没有语意,且长度不可变,称 阅读全文
posted @ 2021-10-12 16:49 振袖秋枫问红叶 阅读(108) 评论(0) 推荐(0)
摘要:核心思想:从第二个元素开始依次和前面的元素进行比较,如果比前一个元素小,那就让前一个元素后移一位,继续向前遍历,直到前面所有的元素都比自己小,那就存在当前的位置。然后再从第三个元素开始...最终完成排序 实现插入排序法 import java.util.Arrays; public class Al 阅读全文
posted @ 2021-09-28 23:15 振袖秋枫问红叶 阅读(75) 评论(0) 推荐(0)
摘要:核心思想:从第一个元素开始,从前往后进行遍历,将找到的最小元素放在第一位;然后从第二位元素开始,继续找出剩下元素中的最小值,放在第二位...最终完成排序 实现选择排序法 使用泛型约束并实现Comparable接口 Comparable 是排序接口 若一个类实现了Comparable接口,就意味着“该 阅读全文
posted @ 2021-09-28 14:18 振袖秋枫问红叶 阅读(85) 评论(0) 推荐(0)
摘要:循环不变量 public static<E> int search(E[] arr, E target){ /** * 循环不变量,就是在循环中始终遵守的原则 * 因为在arr[0...i-1]中没有找到目标,所以才继续循环 * 这个arr[0...i-1]就是循环不变量,在写循环时一定要清楚循环不 阅读全文
posted @ 2021-09-27 18:46 振袖秋枫问红叶 阅读(168) 评论(0) 推荐(0)
摘要:算法的分类 排序算法 选择、插入、冒泡、希尔、快速、归并、堆排序、计数排序、桶排序、基数排序 查找算法 线性查找、二分查找 字符串算法 KMP、模式匹配 实现线性查找法 public class Algorithm { public static void main(String[] args) { 阅读全文
posted @ 2021-09-27 18:45 振袖秋枫问红叶 阅读(79) 评论(0) 推荐(0)