数据结构与算法
叁木-Neil
这个作者很懒,什么都没留下…
展开
-
数据结构---------数组
1.Java数组介绍概念:同一种类型的集合,其实数组就是一个容器 使用优点:可以自动给数组中的元素从0开始编号,方便操作这些元素。 声明的方式: 元素类型[] 数组名=new 元素类型[元素个数或数组长度] 例:int[] arr=new int[5]; 元素类型[] 数组名 =new 元素类型[]{元素,元素,......} 例:int[] ...原创 2018-10-26 19:48:44 · 1022 阅读 · 0 评论 -
排序算法--------选择排序
选择排序1.思想2.图解3.时间复杂度分析4.java程序实现5.运行结果1.思想选择排序的基本思想就是从待排序列中选择出最小的,然后将被选出元素和序列的第一个元素互换位置(当前默认是升序排列),则互换完成后第一个元素就是整个序列的最小的元素,则一次选择排序结束。然后我们从剩下的子序列中选择出最小的,然后将该被选出来的元素和该子序列的第一个元素(即整个序列的第二个元素)互换位置,则当前整个序列...原创 2019-01-23 08:50:17 · 541 阅读 · 0 评论 -
数据结构与算法教程目录
一、数据结构1.1 数据结构---------数组1.2 数据结构---------链表1.3 数据结构---------二叉树二、算法2.1 最通俗易懂的--------时间复杂度2.2 简单介绍--------空间复杂度2.3 稳定排序和不稳定排序2.4 数据结构内部排序和外部排序2.5 查找算法--------二分查找算法2.6 排序算法--------Shell排序(希...原创 2019-02-05 13:56:31 · 2237 阅读 · 0 评论 -
排序算法--------直接插入排序
直接插入排序1.算法方法描述2.算法思想3.图解4.算法分析1.算法方法描述从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置将新元素插入到该位置后重复步骤 2~52.算法思想将待排序表分为两部分,左边为有序区,右边为无序区。...原创 2019-02-05 14:02:06 · 262 阅读 · 0 评论 -
排序算法--------快速排序(分治法 )
快速排序 1.简介2.实现的基本思想3.举个例子4.java代码实现4.1实现代码4.2 主方法代码5.快排总结5.1不足5.2改进策略1.简介快速排序的速度就如他的名字所示——快!并且这种算法一般被用作数量级比较大的数据当中,在大数据中有着很重要的地位。而快排主要有两部分,分段(Partition)和递归(Recursive)。分段既将一组数据相对一个参考值分为两段,左段比参考值小,右端比参...原创 2019-02-12 18:58:21 · 2406 阅读 · 0 评论 -
排序算法--------归并排序
归并排序1.简介2.图解3.算法思想4.Java递归实现5.算法分析:6.总结7.归并排序优化1.简介归并排序:是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并操作(Merge):也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并排序有多路归并排序、两路归并排序 , 可用于内...原创 2019-02-13 19:10:04 · 1120 阅读 · 0 评论 -
数据结构总结---------线性表
数据结构总结---------线性表1.顺序表(数组)1.1 增加1.2 删除1.3 更改1.4 查询2.链式存储结构(链表)2.1 增加2.2 删除2.3 更改2.4 查找2.5 空间2.6 链表结构的讨论1.顺序表(数组)由于讨论的是线性表所以会与链表进行增删改的对比1.1 增加当每次的加入都是在末尾时:速度很快当插入的位置不在末尾时(不管是否知道下标的情况下):速度相对链表来说是...原创 2019-03-01 11:50:51 · 1496 阅读 · 0 评论 -
数据结构总结---------非线性表(二叉树)
数据结构总结---------非线性表1.二叉树1.二叉树为什么存在二叉树?二叉树的顺序结构可以解决链表的查询慢的问题,因为解决了查询慢的问题所以相对的更改数据也变的快了...原创 2019-03-02 08:48:07 · 1733 阅读 · 0 评论 -
数据结构总结---------非线性表(多叉平衡树)
数据结构总结---------非线性表(多叉平衡树)1.为什么会出现多叉平衡树?2.常见的多叉平衡树2.1 B树1.图解2.简介2.2 B+树1.图解2.简介2.3 B*树1.图解1.为什么会出现多叉平衡树?多叉树可以降低树的深度,从而就可以达到提高查询效率的作用2.常见的多叉平衡树2.1 B树1.图解2.简介B树应文件系统的要求而发展起来的,大量数据放在外存中,通常放在磁盘中,由...原创 2019-03-02 08:49:56 · 1785 阅读 · 0 评论 -
排序算法--------Shell排序(希尔排序/缩小增量排序)
Shell排序(希尔排序/缩小增量排序)1.简介2.改进了什么?3.思想的体现4.算法复杂度的分析5.举个例子6.java代码实现7.对比直接插入排序1.简介希尔排序是非稳定排序算法。 希尔排序因DL.Shell于1959年提出而得名。 是对直接插入排序的一个优化。2.改进了什么?由于直接插入排序是一步一步移动的而,我们不希望它是一步一步的移动,而是大步大步的移动。所以为了达到这个条件希尔...原创 2019-01-23 08:39:00 · 732 阅读 · 0 评论 -
查找算法--------二分查找算法
二分查找算法1.二分查找又称折半查找优点:比较次数少,查找速度快,平均性能好缺点:待查表为有序表2.注意事项1.(left+right)/2:会出现溢出的现象2.判断条件是中间位置的值是否小于03.我们的对比条件就已经排除mid下标的值,所以可以放心的-/+ 1,而且这样会符合二的条件避免死循环!3.代码逻辑步骤① 首先确定整个查找区间的中间位置 mid = left + (r...原创 2019-01-22 21:30:43 · 869 阅读 · 0 评论 -
数据结构---------二叉树
一、数组和链表的介绍数组:查找快,但插入和删除相对来说比较费时为什么?由于其结构是在连续的所以遍历时不像链表空间有间隔,所以相对会快,插入和删除时不仅要插入还要把之后的数据向后移动 链表:插入和删除相对较快,查找相对慢 为什么? 插入和删除只需要改变一个指引,相对数组查找慢是因为空间结构不是连接的。二、二叉树为什么存在? 解决没有同时具备查找,删除和插入都快的数据结构。 优点:...原创 2018-11-07 18:41:19 · 388 阅读 · 0 评论 -
最通俗易懂的------------时间复杂度
一、时间复杂度是什么?是表示执行某个算法所需要的计算工作量 用什么表示与官方定义? 渐进时间复杂度(大O表示法):若存在函数 f(n),使得当n趋近于 无穷大时,T(n)/ f(n)的极限值为不等于零的常数,则称 f(n)是T(n)的同数量级函数。记作 T(n)= O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。PS:看的头疼代表你还是个正常人,记住红色字体内容,...原创 2018-11-07 20:28:39 · 1041 阅读 · 0 评论 -
数据结构---------链表
一、链表为什么存在? 1).数组的缺陷 无序列表:搜索性能差,有序列表:插入效率低,并且两个的删除效率也很低,数组在创建后大小就固定了,设置的过大会造成内存浪费,过小又不能满足数据量的存储 2).解决上诉一部分问题二、链表简介 1).链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两...原创 2018-11-05 18:30:07 · 525 阅读 · 0 评论 -
简单介绍------空间复杂度
是什么? 指执行某个算法所需要的内存空间 空间复杂度的介绍(来自百度) 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所...原创 2018-11-08 13:41:02 · 823 阅读 · 0 评论 -
排序算法--------堆排序
堆排序1.堆排序百度百科简介2.什么是堆2.1 结构性2.2 堆序性3.堆排序的实现(大根堆实现)3.1 思想实现3.2 实现图解第一步:构建大根堆3.2.1 i=11/2-1,即i=43.2.2 i=33.2.3 i=23.2.4 i=13.2.5 i=0第二步:交换数据4.java代码实现1.堆排序百度百科简介堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法...原创 2019-01-24 16:06:11 · 1038 阅读 · 0 评论 -
排序算法--------冒泡排序
冒泡排序1.什么是冒泡排序?2.算法实现思想3.图解思想4.java实现5.算法复杂度分析:5.1 时间复杂度5.2 空间复杂度5.3 稳定性1.什么是冒泡排序?为什么这个排序要叫冒泡呢?为什么不叫其他名词呢?其实这个取名是根据排序算法的基本思路命名的,见名知意,冒泡排序,就是像泡泡在水里一样,在水里大的泡泡先浮出水面,就是大的先排出来,最小的最慢排出。2.算法实现思想比较两个相邻的数,...原创 2019-01-25 08:35:04 · 1193 阅读 · 0 评论 -
稳定排序和不稳定排序
稳定排序和不稳定排序1.如何区分?2.稳定性意义的探讨1.如何区分?稳定排序:排序前后两个相等的数相对位置不变,则算法稳定非稳定排序:排序前后两个相等的数相对位置发生了变化,则算法不稳定2.稳定性意义的探讨1、如果只是简单的进行数字的排序,那么稳定性将毫无意义。2、如果排序的内容仅仅是一个复杂对象的某一个数字属性,那么稳定性依旧将毫无意义(所谓的交换操作的开销已经算在算法的开销内了,如...原创 2019-01-22 21:24:37 · 11284 阅读 · 0 评论 -
数据结构内部排序和外部排序
数据结构内部排序和外部排序1.1 概念1.2 衡量方法1.3 区分与汇总1.1 概念内排序:在排序过程中,所有元素调到内存中进行的排序。外排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程1.2 衡量方法内部排序:比较次数,也就是时间复杂度外部排序:IO次数,也就是读写外存的次数1.3 区分与汇总内排序和外排序 的区分就是看排序...原创 2019-01-22 21:27:04 · 3023 阅读 · 0 评论 -
数据结构总结---------非线性表(哈希表)
数据结构总结---------非线性表(哈希表)1.为什么有哈希表?2.哈希表的结构与特点1.特点2.结构3.图解4.结论3.哈希表涉及到的概念了解1.hashCode()2.equals()3.各种类型数据的哈希码应该如何获取hashCode()值4.如何避免插入数据时产生冲突?1.为什么有哈希表?由于前面结构的查询都是通过关键字与给定值比较,来确定位置,效率取决于比较的次数。而最理想的方法...原创 2019-03-02 18:25:36 · 3444 阅读 · 0 评论