随笔分类 - 算法与设计 / 数据结构与算法
摘要:简介 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值, 将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定
阅读全文
摘要:简介 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之) 在治阶段,我们需要将两
阅读全文
摘要:简介 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 根据2边的索引找到中间索引
阅读全文
摘要:插入排序存在的问题 数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是: {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5,6} {1,2,3,4,5,6} 结论: 当需要插入
阅读全文
摘要:简介 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素, 排序过程中每次从无序表中取出第
阅读全文
摘要:简介 选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 代码实现 public class SelectSort { public static void main(String[] args) { int [] arr = {101, 34
阅读全文
摘要:简介 代码实现 public class BubbleSort { public static void main(String[] args) { int arr[] = {3, 9, -1, 10, 20}; // 第1趟 int temp = 0; // 临时变量 for (int j = 0
阅读全文
摘要:度量1个算法的执行时间 时间频度 忽略常数项 忽略低次项 忽略系数 时间复杂度 常见时间复杂度 常数阶O(1) 对数阶 线性阶 线性对数阶 平方阶 平均时间复杂度 最坏时间复杂度 空间复杂度
阅读全文
摘要:思路分析 代码实现 public class Queue8 { //定义一个max表示共有多少个皇后 int max = 8; //定义数组array, 保存皇后放置位置的结果,比如 arr = {0 , 4, 7, 5, 2, 6, 1, 3} int[] array = new int[max]
阅读全文
摘要:简介 递归需遵守的规则 应用实例 代码实现 public class MiGong { public static void main(String[] args) { // 先创建一个二维数组,模拟迷宫 // 地图 int[][] map = new int[8][7]; // 使用1 表示墙 /
阅读全文
摘要:代码实现 package com.atguigu.stack; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class PolandNotation { public static
阅读全文
摘要:前缀表达式(波兰表达式) 中缀表达式 后缀表达式(逆波兰表达式) 使用栈实现逆波兰表达式 public class PolandNotation { public static void main(String[] args) { //先定义给逆波兰表达式 //(30+4)×5-6 => 30 4
阅读全文
摘要:代码实现 public class Calculator { public static void main(String[] args) { //根据前面老师思路,完成表达式的运算 String expression = "7*2*2-5+1-5+3-4"; // 15//如何处理多位数的问题?
阅读全文
摘要:简介 栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表。 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
阅读全文
摘要:代码实现 // 根据用户的输入,计算出小孩出圈的顺序 /** * * @param startNo * 表示从第几个小孩开始数数 * @param countNum * 表示数几下 * @param nums * 表示最初有多少小孩在圈中 */ public void countBoy(int st
阅读全文
摘要:简介 设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列 # 解决思路 用一个不带头结点的循环链表来处理 Jos
阅读全文
摘要:简介 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。 单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到 temp,temp 是待删除节点的前一个节点 代码实现 public class DoubleLinkedListD
阅读全文
摘要:获取单链表中有效节点的个数 //方法:获取到单链表的节点的个数(如果是带头结点的链表,需求不统计头节点) /** * @param head 链表的头节点 * @return 返回的就是有效节点的个数 */ public static int getLength(HeroNode head) { i
阅读全文
摘要:方式2:在添加英雄时,根据排名将英雄插入到指定位置(如果有这个排名,则添加失败,并给出提示) 代码实现 import java.util.Stack; public class SingleLinkedListDemo { public static void main(String[] args)
阅读全文
摘要:简介 链表是有序的列表 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 发现链表的各个节点不一定是连续存储. 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 应用实例 使用带 head 头的单向链表实现 水浒英雄排行榜管理完成对英雄人
阅读全文