技术博客:悬笔e绝 文章转载自http://www.xuanbiyijue.com/2018/02/14/数据结构与算法-排序算法/ 常见的五种排序算法: 冒泡排序;选择排序;插入排序;归并排序;快速排序...; 前三种是基本排序算法,后两个是高级的排序算法; 冒泡排序 最慢 的排序算法之一,数据值会像气泡一样从数组的一段漂浮到另一端 基本思路: 1.依次比较相邻的两个数,如果第一个比第二个小,不变。
Java数据结构和算法 数据结构 线性数据结构:常见的有一维数组,线性表,栈,队列,双队列,串。 非线性数据结构:常见的有:多维数组,集合,树,图,散列表(hash)....在Java里面就是指String,而String里面是由chat[]来进行储存。 KMP算法: 这个算法一定要牢记,Java数据结构这本书里面针对字符串的查找匹配算法也只介绍了一种。...Java里面很少提供这样的工具类,而java里面tree和图底层的native方法用了多维数组来储存。 2:集合 由一个或多个确定的元素所构成的整体叫做集合。...在Java里面可以去广义的去理解为实现了Collection接口的类都叫集合。 3:树 树形结构,作者觉得它是一种特殊的链形数据结构。最少有一个根节点组成,可以有多个子节点。...Java中的hashCode: 我们都知道所有的class都是Object的子类,既所有的class都会有默认Object.java里面的hashCode的方法,如果自己没有重写,默认情况就是native
rear == maxSize - 1[队列满] 代码实现: import java.util.Scanner; /** * @author shaoshao * @version 1.0 *...front指向队列的第一个元素,front 的初始值是0 rear指向队列的最后一个元素的后一个位置,因为希望空出一个空间作为约定(判断队列是否满) rear的初始值是0 代码实现: import java.util.Scanner...//将head.next 指向 reverseHead.next,实现单链表反转 head.next = reverseHead.next; } 从尾到头打印单链表 利用栈的数据结构...用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束
动态规划算法 动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法 动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题...贪心算法 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法 贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解...重复第1步直到覆盖了全部的地区 代码实现 import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet...和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。...package com.ssm.tenAlgorithms; import java.awt.Point; import java.util.ArrayList; import java.util.Comparator
显然,深度优先搜索是一个递归的过程 深度优先遍历算法步骤 访问初始结点v,并标记结点v为已访问。 查找结点v的第一个邻接结点w。...类似于一个分层搜索的过程,广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结点的邻接结点 广度优先遍历算法步骤 访问初始结点v并标记结点v为已访问。...结点v入队列 当队列非空时,继续执行,否则算法结束。 出队列,取得队头结点u。 查找结点u的第一个邻接结点w。...代码实现 package com.ssm.graph; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList
} return -1; } } 运行结果: 找到了下标为:4 1.2 二分查找 代码实现: package com.ssm.search; import java.util.ArrayList...} return resIndexList; } } } 运行结果: ArrayList=[4, 5] 1.3 插值查找 插值查找算法类似于二分查找...right – left) * (findVal – arr[left]) / (arr[right] – arr[left]) 代码实现: package com.ssm.search; import java.util.Arrays...代码实现: package com.ssm.search; import java.util.Arrays; /** * @author shaoshao * @version 1.0 * @...maxSize; i++) { f[i] = f[i - 1] + f[i - 2]; } return f; } //编写斐波那契查找算法
1.算法的时间复杂度 1.1 度量一个程序(算法)执行时间的两种方法: 事后统计的方法 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件...事前估算的方法通过分析某个算法的时间复杂度来判断哪个算法更优. 1.2 时间频度 时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。...这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的界限,这就保证了算法的运行时间不会比最坏情况更长。 平均时间复杂度和最坏时间复杂度是否一致,和算法有关(如图:)。...2 算法的空间复杂度 类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间,它也是问题规模n的函数。...代码实现: package com.ssm.sort; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date
第一部分:Java数据结构 要理解Java数据结构,必须能清楚何为数据结构?...而一个数据结构的设计过程分成抽象层、数据结构层和实现层。 数据结构在Java的语言体系中按逻辑结构可以分为两大类:线性数据结构和非线性数据结构。...一、Java数据结构之:线性数据结构 线性数据结构:常见的有一维数组,线性表,栈,队列,双队列,串。...在Java里面就是指String,而String里面是由chat[]来进行储存。 KMP算法: 这个算法一定要牢记,Java数据结构这本书里面针对字符串的查找匹配算法也只介绍了一种。...第二部分:Java基本算法 理解了Java数据结构,还必须要掌握一些常见的基本算法。
逆波兰计算器 支持 + - * / ( ) 多位数,支持小数, 兼容处理, 过滤任何空白字符,包括空格、制表符、换页符 逆波兰计算器 代码实现: package com.ssm.stack; import java.util.ArrayList...; import java.util.List; import java.util.Stack; /** * @author shaoshao * @version 1.0 * @date 2021...再压入- 5 1 2 3 + 4 × + 5 - 数字 到达最右端 1 2 3 + 4 × + 5 - 空 s1中剩余的运算符 代码实现 package com.ssm.stack; import java.util.ArrayList...; import java.util.List; import java.util.Stack; /** * @author shaoshao * @version 1.0 * @date 2021...2 2 1 1 1 1 1 1 1 1 3.2 八皇后问题 问题描述: 任意两个皇后不能处于同一行、同一列或同意斜线,问有多少中解法 说明:理论上应该创建一个二维数组来表示棋盘,但是实际上可以通过算法
常见的预测算法有1.简易平均法,包括几何平均法、算术平均法及加权平均法;2.移动平均法,包括简单移动平均法和加权移动平均法;3,指数平滑法,包括一次指数平滑法和二次指数平滑法,三次指数平滑法;...经验法和试算法是选择权重的最简单的方法。一般而言,最近期的数据最能预示未来的情况,因而权重应大些。例如,根据前一个月的利润和生产能力比起根据前几个月能更好的估测下个月的利润和生产能力。
在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现...本篇博客我们介绍另外一种数据结构——堆,注意这里的堆和我们Java语言,C++语言等编程语言在内存中的“堆”是不一样的,这里的堆是一种树,由它实现的优先级队列的插入和删除的时间复杂度都为O(logN),...这里要注意堆和前面说的二叉搜索树的区别,二叉搜索树中所有节点的左子节点关键字都小于右子节点关键字,在二叉搜索树中通过一个简单的算法就可以按序遍历节点。...然后进行向上筛选的算法。 注意:向上筛选和向下不同,向上筛选只用和一个父节点进行比较,比父节点小就停止筛选了。 ? 5、完整的Java堆代码 首先我们要知道用数组表示堆的一些要点。
java代码实现 public void sort(int[] arr, int left, int right){ if(left >= right){ return
前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入、删除和查找性能都比较好。...对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比如二叉树、哈希表的数据结构。 ...而本篇博客讲解的数据结构和算法更多是用作程序员的工具,它们作为构思算法的辅助工具,而不是完全的数据存储工具。...2、Java模拟简单的顺序栈实现 ?...package com.ys.datastructure; import java.util.Arrays; import java.util.EmptyStackException; public
java的算法实现: package string; public class S_KaiSa { //凯撒密码的实现 public char[] kaiSa(char[] s,int k){
本篇博客我们将讲解一种新型的数据结构——链表。我们知道数组是一种通用的数据结构,能用来实现栈、队列等很多数据结构。...而链表也是一种使用广泛的通用数据结构,它也可以用来作为实现栈、队列等数据结构的基础,基本上除非需要频繁的通过下标来随机访问各个数据,否则很多使用数组的地方都可以用链表来代替。 ...(){ 27 dp.display(); 28 } 29 30 } 5、抽象数据类型(ADT) 在介绍抽象数据类型的时候,我们先看看什么是数据类型,听到这个词,在Java...中我们可能首先会想到像 int,double这样的词,这是Java中的基本数据类型,一个数据类型会涉及到两件事: ①、拥有特定特征的数据项 ②、在数据上允许的操作 比如Java中的int数据类型...这在我们Java语言中的接口设计理念是想通的。 6、有序链表 前面的链表实现插入数据都是无序的,在有些应用中需要链表中的数据有序,这称为有序链表。 在有序链表中,数据是按照关键值有序排列的。
上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍。...Java语言为例,来详细介绍Java语言中数组的用法。...1、Java数组介绍 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型。...4、总结 本篇博客我们讲解了数组的基本用法,以及用Java语言中的类实现了一个数组的数据结构,但是我们分析该数据结构,发现存在很多性能问题,后面会讲解别的数据结构,看看那些数据结构是如何处理这些问题的...当然在讲解数据结构之前,下篇博客我们会简单的介绍几种常用的排序算法。
冒泡排序 插入排序 选择排序 希尔排序 快速排序 归并排序 二分查找 package com.demo.test; import java.util.Arrays; import java.util.Scanner
冒泡排序 private void maopao(int arr[]) { for (int i = 0; i < arr.length; i++) ...
数据结构与算法 —— Java 实现(链表) 一、单链表 1.1 链表的定义 1.2 链表添加一个新的节点 1.3 判断当前节点是否为最后一个节点 (isLast) 1.4 删除下一节点 (removeNext...获取下一个节点及数据 2.3 插入节点 2.4 删除节点 2.5 循环遍历每一个节点 三、循环双链表 3.1 双向循环链表的定义 3.2 获取上(下)一个节点 3.3 增加节点 一、单链表 不知大家是否还记得自己刚接触数据结构的时候...,是怎么过来的吗,那时候学习数据结构是使用 c语言实现,那时候会充满各种疑问?...这个 * 啥意思,那个 & 又是啥意思,为啥结构体里面,有个和结构体名一样的东西,是不是像极了当初学数据结构的你呢?...链表实际上是一个二元组,它的每一个节点都分别存有 数据 和 下一个节点的地址,这样我们就可以抽象出 链表中具有的基本属性 定义 节点为 Node 每个节点中都有数据 data 和指向下一个地址引用 (指针,java
temp; temp=a[i]; a[i]=a[j]; a[j]=temp; } } 再去定义一个 叫 bubble test的测试类 import java.util.Arrays
领取专属 10元无门槛券
手把手带您无忧上云