数据结构与算法
Aruiea
这个作者很懒,什么都没留下…
展开
-
数据结构note12:归并排序
/** * instruction of project * * @author Aruiea.com * @ClassName MergeSort * @Version 1.0 * @Date 2020/8/2 14:47 * 归并排序的思想很简单: * 用分治想法把数组分为两部分,然后递归分治这两部分,直到剩余两个元素,进行排序。 * 最后依次再归并起来。 * * 归并算法: * 两个有序序列的归并: * 把两个序列的第一个元素相比较,然后把他们两个按顺序存放到一个临时数组里.原创 2020-08-02 17:11:15 · 74 阅读 · 0 评论 -
数据结构note11:快速排序
/** * instruction of project * * @author Aruiea.com * @ClassName FastSort * @Version 1.0 * @Date 2020/8/2 14:48 * 快速排序思想: * 1.先从数列中取出一个数作为基准数(简单起见就选第一个数) * 2.分区过程:将比这个数大的数全放到他的右边,比他小的数全放到他的左边(分治) * 3.再对左右两边的区重复第一步和第二部操作,直到各区间只有一个数(递归) * 简单来说就是:.原创 2020-08-02 16:48:19 · 104 阅读 · 0 评论 -
数据结构note10:折半插入排序
/** * instruction of project * * @author Aruiea.com * @ClassName BinaryInsertSort * @Version 1.0 * @Date 2020/8/2 14:13 * 折半插入排序:是对插入排序的一种改进,增加了二分法 * 把已排序部分,首元素定位low,末尾元素定为high。 * 根据二分法缩小查找范围,直到找到一个temp>=dataArr[mid]的位置,把元素插入到这个位置的后面 */ public原创 2020-08-02 14:45:14 · 84 阅读 · 0 评论 -
数据结构note9:堆排序
/** * 算法步骤: * 1.先把待排序数组A调整成最大堆 * 把最大堆的最大值(根节点)和堆的最后一位交换,最大值是最后一位 * 2.重复构建堆(不再包含排过序的元素),排序,直到堆的大小为1,排序结束。 * * 补充:二叉树结构,也就是堆中,父节点的索引和左右儿子的节点关系如下: * 以数组实现,从下标0开始计算 * parent:i * leftchild:2i+1 * rightchild:2i+2 *也可以记作是:parent = Math.floor(leftchild)原创 2020-08-02 14:07:13 · 77 阅读 · 0 评论 -
数据结构note4:单链表的实现,增删改查
/** * instruction of project * * @author Aruiea.com * @ClassName LinkedList * @Version 1.0 * @Date 2020/7/19 19:33 */ public class LinkedList { public int size;//链表大小 private Node head;//head指向头节点,空 public LinkedList() { size =原创 2020-07-19 21:11:56 · 65 阅读 · 0 评论 -
数据结构note3:队列的实现——循环数组队列
* 用循环数组实现队列 * 队列:从尾入队,从头出队。 * rear-1指向尾元素 * front指向头元素 */ public class CircleArrayQueue { public static void main(String[] args) { CircleArrayQueue circleArrayQueue = new CircleArrayQueue(3); System.out.println(circleArrayQueue.ge.原创 2020-07-16 23:39:42 · 98 阅读 · 0 评论 -
数据结构note2:队列的实现——用java数组方式
* 用数组实现数据结构:队列(头指针,尾指针,最大容量) * 添加数据(入队),删除数据(出队),遍历数据(查看所有数据),得到队头队尾元素。 * 缺点:数组使用一次就不能用了,复用性差。 * 改进:使用环形数组队列。 */ //总结:1.队列的逻辑结构是,线性表,FIFO,因此用front指向第一个元素之前,rear指向最后一个元素。当front=rear时,队列为空。 //用数组实现队列这种逻辑结构的时候,会受到数组最大容量的限制,有改进方法:循环数组队列。 public class Arr.原创 2020-07-15 21:42:10 · 59 阅读 · 0 评论 -
数据结构note1:稀疏数组/二维数组的转换
/** * instruction of project * * @author Aruiea.com * @ClassName LineADT * @Version 1.0 * @Date 2020/7/13 20:58 * 数据结构:线性结构,非线性结构 * 线性结构:数据元素之间存在一对一之间的线性关系(数组,队列,链表,栈) * 存储方式:1.顺序表 2.l链表 * 非线性结构:二维数组,多维数组,广义表,树结构,图结构 */ //稀疏数组:二维数组中存储了许多无原创 2020-07-13 22:38:28 · 129 阅读 · 0 评论 -
数据结构note8:希尔排序
/** * instruction of project * * @author Aruiea.com * @ClassName ShellSort * @Version 1.0 * @Date 2020/7/31 9:29 * 希尔排序是在插入排序上的拓展:主要解决 * 思路如下: * 在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。 * 然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。 * 比如:length=原创 2020-07-31 10:20:46 · 83 阅读 · 0 评论 -
数据结构note7:插入排序
算法步骤: 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。) java代码: public class MainApp { public static void main(String[] args) { // 排序算法,插入排序 // 对 arr 进行拷贝,不改变参数内原创 2020-06-30 00:03:31 · 2178 阅读 · 0 评论 -
数据结构note5:冒泡排序
冒泡排序(Bubble Sort) 循环i-1次,每次比较相邻两位的大小并交换,最大的值都会被排到最后面。 算法步骤 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 java代码 public class MainApp { public static void mai转载 2020-06-29 23:58:27 · 2107 阅读 · 0 评论 -
数据结构note6:选择排序
选择排序 是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 算法步骤 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 重复第二步,直到所有元素均排序完毕。 java代码 public class MainApp { public static void main(String[] args) {原创 2020-06-29 23:47:50 · 69 阅读 · 0 评论