数据结构与算法
冬瓜闯世界
嘎嘎嘎
展开
-
经典排序之希尔排序(Java)
简单插入排序存在的问题数组 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,3,4,5,6,6}结论: 当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响。希尔排序法介绍希尔排序是希尔于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的更高效的版本,也称为缩小增量排序。原创 2020-11-11 20:07:27 · 113 阅读 · 0 评论 -
经典排序之插入排序(Java)
插入排序法介绍插入式排序属于内部排序法,是对于排序的元素的方式找寻该元素的适当位置,以达到排序的目的。插入排序法思想插入排序的基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。代码实现public class charu { public static void main(String原创 2020-11-11 19:49:40 · 98 阅读 · 0 评论 -
经典排序之选择排序(Java)
基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按直接的规则选出某一个元素,再依规定交换位置后达到排序的目的。选择排序思想选择排序(select sorting)也是一种简单的排序方法。它的基本思想是: 第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1] ~arr[n-1]中选取最小值,与arr[1]交换, 第三次从arr[2] ~arr[n-1]中选取最小值,与arr[2] 交换,…第i次从arr[i-1] ~ arr[n-1]中选取最小值,与ar原创 2020-11-10 22:17:56 · 203 阅读 · 0 评论 -
经典排序之冒泡排序(Java)
排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序: 指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序: 数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序常见的排序算法分类:算法的时间复杂度度量一个程序(算法)执行时间的两种方法1.事后统计的方法:这种方法可行,但是有两个问题,一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计原创 2020-11-10 20:33:37 · 267 阅读 · 0 评论 -
递归学习(Java)
递归的思想程序调用自身的编程技巧称为递归.。简单来说,就是一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题(子问题)来求解。因为解决原问题和解决子问题往往是同一个方法,所以形成了自己调用自己的情况。递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归需具备的条件子问题须与原始问题为同样的事,且更为简单不能无限制地调用本身,必须有个出口,否则会出现栈溢出。例子: 计算正整数n的阶乘原问题: 计算n!子问题: 计算(n-1)!联系:原创 2020-11-08 15:33:16 · 1177 阅读 · 0 评论 -
动态规划入门(Java)
动态规划介绍动态规划通过组合子问题的解来求解原问题,一般来说,动态规划应用于重叠子问题的情况,即不同的子问题具有公共的子子问题。动态规划算法对每个子子问题只求解一次,将其解保存再一个表格中,从而无需每次求解一个子子问题时都重新计算,避免了这种不必要的计算工作。动态规划有两种等价的实现方法第一种方法称为带备忘的自顶向下法。此方法仍按自然的递归形式编写过程,但过程会保存每个子问题的解(通常保存再一个数组或散列表中)。当需要一个子问题的解时,过程首先检查释放已经保存过此解。如果是,则直接返回保存的值,从而原创 2020-11-08 20:10:59 · 555 阅读 · 1 评论 -
逆波兰计算器(中缀转后缀)
逆波兰计算器输入一个逆波兰表达式(后缀表达式),使用栈(Stack),计算其结果思路如下例如(3+4)X5-6对应的后缀表达式就是 34+5X6-,针对后缀表达式求值步骤如下:从左至右扫描。将3和4压入堆栈;遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素),计算出3+4的值,得7,再将7入栈将5入栈接下来是X运算符,因此弹出5和7,计算出7X5 = 35,将35入栈将6入栈最后是-运算符,计算出35-6的值,即25,由此得出最终结果代码如下:public static原创 2020-11-07 21:44:56 · 168 阅读 · 0 评论 -
栈实现综合计算器(Java中缀表达式)
思路如下:代码如下package day04;public class Calcoluate { public static void main(String[] args) { //创建两个栈 数字栈和符号栈 ArrayStack2 numStack = new ArrayStack2(10); ArrayStack2 operateStack = new ArrayStack2(10); //定义要计算的表达式 .原创 2020-11-07 21:14:48 · 132 阅读 · 0 评论 -
栈的基础知识总结
栈的介绍栈是一个先入后出的有序列表栈中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除栈的快速入门用数组模拟栈的使用,由于栈是一种有序列表,当然可以使用数组的结构来存储栈的数据内容数组模拟栈思路如下定义一个top来表示栈顶,初始化为-1入栈的操作,原创 2020-11-05 22:56:51 · 1584 阅读 · 0 评论 -
链表基础知识点(Java)
链表介绍链表一般分为单向链表双向链表环形链表链表属于线性结构,有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构链表是有序的列表,在内存中是如下存储的链表是以节点的方式来存储的,是链式存储每个节点包含data域,next域:指向下一个节点如图: 链表的各个节点不一定是连续存储链表分带头节点的链表和没有头节点的链表,需要根据实际的需求来确定链表和数组的比较数组的优缺点数组的优势在于可以方便的遍历查询所需要的数据,比如说(查询数组中第3个元素的位置原创 2020-11-04 20:30:41 · 665 阅读 · 0 评论 -
稀疏数组和队列(Java)
稀疏数组基本介绍在一个大型的计算领域,数组一般都是多维,多维数组中的很多值都是默认值0,因此记录了很多没用意义的数据,这无疑大大增加了我们的运算时间。这时候稀疏数组就出来了,当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存,大大缩短了存储的空间,看下面一个例子普通的二维数组[0, 1, 0, 2, 0, 0][0, 0, 2, 0, 0, 0][0, 0, 0, 0, 0, 0][0, 0, 0, 1, 0, 0]稀疏数组[4, 6, 4][0, 1, 1原创 2020-11-03 21:10:10 · 141 阅读 · 0 评论