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

摘要:基本思想(从小到大排序) 1.第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换 2.第 i 次从 arr[i-1]~arr[n-1]中选取最小值, 与 arr[i-1]交换 3.第 n-1 次从 arr[n-2]~arr[n-1]中选取最小值,与 arr[n-2]交换 4.总共 阅读全文
posted @ 2022-02-10 15:30 半条咸鱼 编辑
摘要:代码实现(从小到大排序) public class BubbleSort {//从小到大排序 public static void bubbleSort(int[] array) { if (array == null || array.length <= 1) { return; } int te 阅读全文
posted @ 2022-02-10 15:17 半条咸鱼 编辑
摘要:介绍 1.属于“分配式排序”,是桶排序的拓展 2.以空间换时间,效率高的稳定性排序法 基本思想(从小到大) 1.所有待比较数组统一为同样位数长度,位数较短的数前面补0 2.桶是二维数组,总共10桶,0至9号桶,号数表示位数上的值;从最低位(个位)开始,位数为几,就放入几号桶 3.按二维数组下标0至9 阅读全文
posted @ 2022-02-10 15:16 半条咸鱼 编辑
摘要:介绍 1、是计数排序的拓展,支持小数 2、前提:尽量保证元素分散均匀;当元素越聚集,效率越低;元素集中在同一个桶时,桶排序失效 基本思想(从小到大排序) 1、每个桶储存一定范围的元素 2、将待排序数组映射到桶 3、每个桶自排序,排序方法自定 4、将非空桶的元素顺序取出 阅读全文
posted @ 2022-02-10 15:02 半条咸鱼 编辑
摘要:前提: 1、元素必须为整数 2、元素取值要在一定范围内,且比较集中 3、不支持小数 算法步骤(从小到大排序) 1、扫描整个序列 A,获取最小值 min,最大值 max 2、创建新数组 B,大小为 max - min + 1,B 中相同下标的元素,记录的是 A 中相同值的元素个数,B 中元素下标 + 阅读全文
posted @ 2022-02-10 14:56 半条咸鱼 编辑
摘要:1、稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面 2、不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面 3、k:“桶”的个数 4、In-place:不占用额外内存 5、Out-place:占用额外内存 补充 1、希尔排序 (1)希尔排序的平均时间复杂度和最坏时间 阅读全文
posted @ 2022-02-10 14:22 半条咸鱼 编辑
摘要:空间复杂度:一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n)) 常见的空间复杂度 1.O(1):占用空间是常数,不随变量变化而变化 2.O(n):占用空间随变量变化而变化,如一维数组,链表等 3.O(n2):如二维数组 阅读全文
posted @ 2022-02-10 14:04 半条咸鱼 编辑
摘要:时间频度:一个算法中的语句执行次数称为语句频度或时间频度,记为T(n)。 时间复杂度 1.若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作 T(n)=O( f(n) ),称O( f(n) ) 为算法的渐进时 阅读全文
posted @ 2022-02-10 13:52 半条咸鱼 编辑
摘要:递归规则: 1.执行一个方法时,就创建一个新的受保护的独立空间(栈空间) 2.方法的局部变量是独立的,不会相互影响, 3.如果方法中使用的是引用类型变量(比如数组), 就会共享该引用类型的数据. 4.递归必须向退出递归的条件逼近, 否则就是无限递归,出现 StackOverflowError 5.当 阅读全文
posted @ 2022-02-10 12:37 半条咸鱼 编辑
摘要:中缀表达式 1、最常见的运算表达式,一般转成后缀表达式 2、求值步骤 (1)创建两个栈,操作符栈 S1、数字栈 S2 (2)从左至右扫描中缀表达式 (3)遇到操作数时,直接入 S2 (4)遇到运算符时,比较其与 S1 栈顶运算符的优先级 1、若 S1 为空或为“(”,直接入栈 2、若优先级 > 栈顶 阅读全文
posted @ 2022-02-10 00:36 半条咸鱼 编辑
摘要:介绍 1.先入后出的有序列表 2.限制线性表中元素的插入和删除只能在同一端;栈顶:允许插入、删除,栈底:固定的一端 3.栈顶:元素最后放入,最先删除;栈底:元素最先放入,最后删除 4.Stack类已过时,用LinkedList类实现栈 应用 1.子程序的调用:在跳往子程序前,会先将下个指令的地址存到 阅读全文
posted @ 2022-02-09 22:29 半条咸鱼 编辑
摘要:约瑟夫问题:已知有n个人(分别编号为1,2,3…n)围坐成一圈,从第一个人开始报数,报到数m的人出圈;再从下一个人开始重新报数,报到m的人出圈;直至剩下最后一个人的时候游戏结束。输出剩下的人的原始编号。 利用单向环形链表解决约瑟夫问题 class Node {//该节点省略data域 public 阅读全文
posted @ 2022-02-09 22:06 半条咸鱼 编辑
摘要:class Node {//该节点省略data域 public int no; public Node next; public Node pre; public Node(int no) { if (no >= 0) {//要求no要大于0 this.no = no; } } @Override 阅读全文
posted @ 2022-02-09 20:45 半条咸鱼 编辑
摘要:import java.util.Stack; class Node {//该节点省略data域 public int no; public Node next; public Node(int no) { if (no >= 0) {//要求no要大于0 this.no = no; } } @Ov 阅读全文
posted @ 2022-02-09 17:23 半条咸鱼 编辑
摘要:1.链式储存,以节点方式储存 2.每个节点含data域,指针域 3.内存结构中,链表各节点不一定为连续储存 4.分类 (1)带头指针;不带头指针 (2)单向链表;双向链表 阅读全文
posted @ 2022-02-09 13:17 半条咸鱼 编辑
摘要:含义:队列是一个有序列表,可以用数组或链表来实现 特点:先进先出,队列中添加和删除数据的操作分别是在两端进行的 数组模拟队列 1.maxSize是队列最大容量;front+1指向队列最前面的元素,创建初始值为-1,随输出而增加;rear指向队列最后的元素,创建初始值为-1,随输入而增加; 2.fro 阅读全文
posted @ 2022-02-09 12:48 半条咸鱼 编辑
摘要:稀疏矩阵(二维数组) 1、矩阵中分布有大量的元素 0,即非 0 元素非常少 2、稀疏矩阵的压缩存储,数据结构提供有 3 种具体实现方式: (1)三元组顺序表 (2)行逻辑链接的顺序表 (3)十字链表 三元组顺序表(压缩存储稀疏矩阵) 1、记录数组一共有几行几列,有多少个不同的值 2、把具有不同值的元 阅读全文
posted @ 2022-02-09 12:04 半条咸鱼 编辑
摘要:线性结构 1.特点:数据元素之间存在一对一的线性关系 2.存储结构 (1)顺序存储结构:顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 (2)链式存储结构:链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 3.常见线性结构:数组、队列、链 阅读全文
posted @ 2022-02-09 11:07 半条咸鱼 编辑
摘要:黄金分割点:是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比,其比值是一个无理数,用分数表示为(√5-1)/2,取其前三位数字的近似值是0.618 斐波那契数列:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*),随着数列 阅读全文
posted @ 2022-02-09 00:01 半条咸鱼 编辑
摘要:import java.util.ArrayList; public class InsertValueSearch {//假设数组从小到大排序 //递归法,left初始值传入0,right初始值传入array.length - 1 public static ArrayList<Integer> 阅读全文
posted @ 2022-02-08 12:10 半条咸鱼 编辑

点击右上角即可分享
微信分享提示