随笔分类 - 数据结构与算法
1
摘要:归并排序介绍 归并排序(MERGE-SORT)是利用归并的思想实现的排序算法,该算法采用经典的分治策略(分治策略将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案“修补”在一起,即分而治之) 分治排序示意图1 分治排序示意图2-合并相邻有序子序列 在治阶段,我们需要将2个有序的子
阅读全文
摘要:快速排序介绍 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 快速排序示意图 代码
阅读全文
摘要:希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。 基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增
阅读全文
摘要:基本思想 插入排序的基本思想是:将n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。 插入排序思路图 代码实现 pa
阅读全文
摘要:基本思想 选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 代码实现 package sort; import java.util.A
阅读全文
摘要:基本概念 冒泡排序的基本思想是:通过对待排序序列从前到后(从下标较小的元素开始),依次比较相邻元素的值,如果发现逆序(a[j]>a[j+1])则交换,使得值较大的元素逐渐从前向后移动,就像气泡一样往上冒。 简单举例 原始数组 arr[]={20,3,9,-1,10} 第一次:[3, 9, -1, 1
阅读全文
摘要:算法的时间复杂度 事前估算方法:通过分析某个算法的时间复杂度来判断那个算法更优。 事后统计方法:这种方法可行,但不是一个好的方法。该方法有两个缺陷:一是要想对设计的算法的运行性能进行评测,必须先依据算法编制相应的程序并实际运行;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法
阅读全文
摘要:八皇后问题介绍 八皇后问题是国际西洋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能相互攻击,即:任意两个皇后不能处于同一行、同一列或者同一斜线上,问有多少种摆法(共92种)。 八皇后问题算法思路分析 1.第一个皇后先放在第一行第一列 2.第二个皇后放在第二行第一列,
阅读全文
摘要:递归的概念 递归简单的说就是方法自己调用自己,每次调用时传入不同的变量,递归有助程序员解决复杂的问题并使代码更加简洁。 递归的原则 1.执行一个方法时,就创建一个新的受保护的独立空间(栈空间) 2.方法的局部变量是独立的,不会相互影响 3.如果方法中使用的是引用类型变量(如数组),就会共享该引用类型
阅读全文
摘要:上篇中,我们只支持对整数实现,本篇完整实现,支持加减乘除和多位数、小数,思路与上篇相同。 因此直接上代码实现过程 package com.atxihua; import java.util.ArrayList; import java.util.Collections; import java.ut
阅读全文
摘要:前缀表达式又称为波兰表达式,后缀表达式又称为逆波兰表达式 实现过程 1、输入一个逆波兰表达式(后缀表达式),使用栈(Stack),计算其结果 2、支持小括号和多位数,本例简化为支持对整数计算 3、思路分析: 还是以(3+4)*5-6为例,其对应后缀表达式为3 4 + 5 * 6 - 1.从左到右扫描
阅读全文
摘要:后缀表达式适合计算机式的计算,因此在开发中,我们需要将中缀表达式转为后缀表达式。 三种表达式 这里再次区分一下前缀表达式、中缀表达式、后缀表达式(以(3+4)*5-6为例) 中缀表达式就是我们正常遇见的(3+4)*5-6这样的式子 前缀表达式又称为波兰式,其运算符是在数之前 中缀表达式转前缀表达式思
阅读全文
摘要:本例转载自https://blog.csdn.net/sgbfblog/article/details/8001651,为了更好的学习与做笔记,再次感谢原创。 一、后缀表达式求值后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6 5 2 3 + 8 * + 3
阅读全文
摘要:栈的特性在上篇中已经介绍,本篇直接讲述实现综合计算器思路。 使用栈完成表达式的计算思路: 1.通过一个index值(索引),来遍历我们的表达式 2.如果我们发现是一个数字,就直接入数栈 3.如果发现当前的符号栈为空,就直接入栈 4.如果栈中有操作符,就进行比较,如果当前的操作符优先级小于或者等于栈中
阅读全文
摘要:栈的介绍 1.栈是一个先进后出(FILO-First In Last Out)的有序列表 2.栈(Stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端为变化的一端,我们称之为栈顶(top),另一端为固定的一端,我们称之为栈底(Bottom)。 3.
阅读全文
摘要:Josephu(约瑟夫、约瑟夫环)问题 Josephu问题为:设编号为1,2,... n个人围坐一圈,约定编号为k(1<=k<=n)的人开始报数,数到m的那个人出列,他的下一位又从1开始报数,报到m的那个人又出列,以此类推,直到所有人出列为止,由此产生一个出队编号的序列。 提示:用一个不带头节点的循
阅读全文
摘要:双向链表 双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。 图示1: 图示2: 分析: 1.遍历与修改实现方式与单链表一致 2.添加(默认添加到双
阅读全文
摘要:单链表是一种链式存取的数据结构,单链表中的数据是以结点的形式存在,每一个结点是由数据元素和下一个结点的存储的位置组成。单链表与数组相比的最大差别是:单链表的数据元素存放在内存空间的地址是不连续的,而数组的数据元素存放的地址在内存空间中是连续的,这也是为什么根据索引无法像数组那样直接就能查询到数据元素
阅读全文
摘要:在数组模拟队列的基础上,通过取模达到环形来实现 分析思路: 1.front变量的含义做一个调整:front指向队列的第一个元素,即front初始值为0,arr[front]即为第一个元素 2.rear变量的含义做一个调整:rear指向队列的最后一个元素的后一个位置,因为希望空出一个空间作为约定,re
阅读全文
摘要:队列简介 概念: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 队列的数据元素又称为队列元素。在队列中
阅读全文
1

浙公网安备 33010602011771号